Всякий раз, когда я отправляю форму «Добавить счет», ничего не происходит, пока я не обновляю страницу. Вот когда я вижу свой новый элемент в цикле Twig. Такая же проблема возникает, когда я нажимаю ссылку «Удалить». Ничего не удаляется (визуально), пока я не обновляю страницу.Сделать страницу обновления Ajax и PHP без обновления страницы?
Как это сделать сразу же на странице без обновления страницы? Я думаю, что это может иметь какое-то отношение к моему PHP или SQL?
JavaScript:
$(document).ready(function() {
$(".addBill").on("click", function() {
var billAmount = $('.billAmount').val();
var billName = $('.billName').val();
$.ajax({
type: "POST",
url: "index.php",
data: {
bill_amount: billAmount,
bill_name: billName,
action: 'addBill'
}
});
return false;
});
$(".removeBill").on("click", function() {
var id = $(this).data('id');
$.ajax({
type: "POST",
url: "index.php",
data: {
id_to_delete: id,
action: 'removeBill'
}
});
return false;
});
});
HTML:
<form method="post" name="addBillForm">
<input type="text" placeholder="Enter bill name" name="billName" class="billName">
<input type="text" placeholder="Enter bill amount" name="billAmount" class="billAmount">
<input type="submit" value="Submit" name="addBillForm" class="addBill">
</form>
<br><br>
<h2>My Bills</h2>
{% for bill in bills %}
<p>{{ bill.billName }} - {{ bill.billAmount }} -
<a href="#" class="removeBill" data-id="{{ bill.id }}">Remove</a>
</p>
{% endfor %}
Вот мой PHP-файл:
<?php
require_once 'global.php';
if (@$_POST['action'] == 'addBill')
{
$billName = $_POST['bill_name'];
$billAmount = intval($_POST['bill_amount']);
$stmt = $db->prepare("INSERT INTO bills (billName, billAmount) VALUES(?,?)");
$stmt->bindParam(1, $billName);
$stmt->bindParam(2, $billAmount);
$stmt->execute();
}
if (@$_POST['action'] == 'removeBill')
{
$id = intval($_POST['id_to_delete']);
$stmt = $db->prepare("DELETE FROM bills WHERE id = ?");
$stmt->bindValue(1, $id);
$stmt->execute();
}
$billResults = $db->query('SELECT * FROM bills');
$bills = $billResults->fetchAll(PDO::FETCH_ASSOC);
$twigContext = array(
"bills" => $bills
);
echo $twig->render('base.html.twig', $twigContext);
Вы должны добавить обработчик 'success' для своих вызовов ajax и вручную вставить все, что вы возвращаете в DOM, сервер не может обновить страницу до ее перезагрузки. – adeneo
Bingo to above comment и plus, [для отмены только действия по умолчанию используйте 'prevent.Default()' вместо 'return false'] (http://stackoverflow.com/questions/1357118/event-preventdefault-vs-return -ложный). – Rohit416