Я пытаюсь удалить некоторые записи из таблицы базы данных через PHP без перезагрузки страницы (с использованием AJAX). Сначала я печатаю всю информацию в таблице, а затем пользователь может щелкнуть кнопку delete, которая удалит запись. Однако у меня возникают проблемы с передачей записи id методу AJAX.
ListProducts.php
create connection
...
$result = mysqli_query($conn, $sql);
echo "<table border = '1' style = 'border-collapse:collapse;'>";
echo "<tr><th>UserID</th><th>Username</th><th>Action</th></tr>";
if (mysqli_num_rows($result)>0){
while ($row = mysqli_fetch_assoc($result)){
echo "<tr><td>".$row['id']."</td><td>".$row['username']."</td><td><input type = 'submit' onclick = 'delete_record()' value = 'Delete' id = '".$row['id']."'></td></tr>";
}
}
Затем на той же странице есть функция AJAX. Я дал каждому полю input соответствующий идентификатор и пытаюсь выбрать его с помощью jQuery.
function delete_rekord(){
var id = "Default";
$(document).ready(function(){
$("input").click(function(){
id = $(this).attr('id');
});
});
alert(id); //Test; will print DEFAULT
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function (){
if (this.readyState == 4 && this.status == 200){
alert("Deleted user with ID: " + this.responseText);
}
}
xhttp.open("GET", "delete.php?id = "+id, true);
xhttp.send();
}
На delete.php я просто удаляю запись и печатаю идентификатор удаленной записи, который я собираю в этой функции, как responseText и распечатываю сообщение. Я поставил тестовый alert(id) и кажется, что значение var id равно
остается по умолчанию, как я его инициализирую. Так что ошибка должна быть в том, как я получаю идентификатор через jQuery. Есть идеи, как это решить?
Спасибо
Вы должны подготовить оставшийся код внутри документа.
Я отредактировал ваш вопрос, теперь проверьте работает он или нет?
function delete_rekord(){ var id = "Default"; $(document).ready(function(){ $("input").click(function(){ id = $(this).attr('id'); }); }); - это беспорядок - по сути, у вас есть один обработчик событий внутри другого. Вы понимаете, что делает этот код? Я подозреваю, что нет. Либо используйте встроенные обработчики событий, либо используйте ненавязчивые обработчики событий в стиле jQuery. Не смешивайте и не сопоставляйте и, конечно же, не помещайте оба элемента в один и тот же элемент для обработки одного и того же события - это очень сбивает с толку. Также вам может показаться, что jQuery $ .ajax проще в использовании, чем собственный XHR.
@rawathemant относительно вашего (в настоящее время ожидающего) редактирования: вам не следует редактировать вопрос с целью демонстрации потенциального решения - таким образом никто не сможет увидеть исходную проблему, а текст вопроса не имеет смысла. Если вы думаете, что можете это исправить, скопируйте код в Отвечать, измените его, чтобы он работал, а затем отправьте ответ. Также таким образом вы можете получить положительные голоса / принятие ответов и т. д. Я думаю, что на самом деле у вас уже достаточно репутации, и вы все равно должны это понимать. Пожалуйста, отмените свою правку. Спасибо.
@ADyson невозможно отозвать отредактировать.
@rawathemant В этом случае я предлагаю вам изменить свое редактирование таким образом, чтобы оно вернуло код в исходное состояние, и укажите это в своем комментарии к редактированию, чтобы рецензенты поняли. Возможно, вы можете оставить какие-то незначительные улучшения в формулировке вопроса, или в форматировании кода, или в чем-то еще, если вы можете это придумать.






передайте $ row ['id'] в вашу функцию javascript, как показано ниже. В вашем html измените код, как показано ниже
<input type = 'submit' onclick = 'delete_record(".$row['id'].")' value = 'Delete' id = '".$row['id']."'>
В вашем javascript измените функцию следующим образом
function delete_rekord(rowid){
var id = rowid;
Надеюсь, это поможет тебе
Так очевидно, спасибо. Но мне кажется, что мне нужно перезагрузить страницу, чтобы увидеть изменения (в распечатанной таблице). Я что-то не так сделал с AJAX?
ваш ajax имеет дело только с удалением записи без отправки / обновления страницы. чтобы обработать таблицу с удаленными записями, необходимо обновить страницу. ИЛИ вы можете скрыть соответствующую строку таблицы после вызова ajax, чтобы она выглядела так, как будто запись была удалена из таблицы.
Вы должны вставить переменную id в функцию удаления.
echo "<tr><td>".$row['id']."</td><td>".$row['username']."</td><td><input type='submit' onclick='delete_record(".$row['id']."); return false;' value = 'Delete' id = '".$row['id']."'></td></tr>";`
в твоем js
function delete_record(id){ // also rename it to delete_record your fn name was delete_rekord
alert(id); //Test; will print the correct ID
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function (){
if (this.readyState == 4 && this.status == 200){
alert("Deleted user with ID: " + this.responseText);
}
}
xhttp.open("GET", "delete.php?id = "+id, true);
xhttp.send();
}
Передайте значение Id как параметр функции
<input type ='submit' onclick = 'delete_record(".$row['id'].")' value = 'Delete' id = '".$row['id']."'>
function delete_record(id){
alert(id);
}
Вы не можете получить значение идентификатора из функции готовности документа. То есть всегда показывать значение ПО УМОЛЧАНИЮ.