#javascript #php #jquery #ajax
#javascript #php #jquery #ajax
Вопрос:
Я хочу отобразить диалоговое окно подтверждения для пользователя, прежде чем они удалят запись в базе данных. Я разрабатываю это на своем локальном веб-сервере ПК. Примерно так: пользователь выбирает запись для удаления (форма php) пользователь нажимает кнопку удаления (кнопка отправки php), появляется диалоговое окно с сообщением, хотите ли вы удалить запись (jquery) Да — вызов Ajax на другую страницу php в том же каталоге
Я пробовал это как с Chrome, так и с FF без ошибок, которые я вижу, кроме того, что результирующая страница никогда не вызывается. К вашему сведению, de.php страница работает нормально, если я вызываю ее напрямую через браузер следующим образом:
http://localhost/de.php?eid=61
Вот несколько фрагментов:
<script>
$(function() {
$( "#dialog-confirm" ).dialog({
resizable: false,
height:340,
modal: true,
buttons: {
"Delete Event": function() {
$.ajax({
url: '/de.php?eid=<?php echo $theEventId ?>',
success: function(data) {
alert('success');
}, error: function (data) {
alert('failed');
}
});
$( this ).dialog( "close" );
$('#myDiv').append('Trying to Delete');
},
Cancel: function() {
$( this ).dialog( "close" );
$('#myDiv').append('Delete Cancelled');
}
}
});
});
</script>
Код формы
<form method="post" action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI']) ?>" id="ee_form">
<div id="myDiv"></div>
<input type="submit" name="Update" value="Update Event" />
<a href="index.php"><input type="button" value="Cancel" /></a>
<input type="submit" name="Delete" value="Delete Event <?php echo $theEventId ?>" />
</form>
Диалоговое окно отображается нормально, с правильным eid.
Если я нажимаю кнопку «Удалить событие», я получаю предупреждение «успех», диалоговое окно закрывается, «Попытка удаления» выводится на экран нормально, но никаких указаний на то, что de.php когда-либо вызывался.
Правильно ли я это делаю, чего мне не хватает?
Комментарии:
1. Что вы имеете в виду, нет никаких указаний на то, что файл был вызван, похоже, что предупреждение об успешном завершении указывает на то, что он был вызван, чего вы ожидаете?
2. Используйте свои инструменты разработчика (F12), в частности вкладку Сеть, если используете Chrome, чтобы узнать, был ли вызов успешным или нет.
3. Возможно, вы в замешательстве, потому что вы не обновляете сообщение «Пытаюсь удалить» до чего-то значимого в обработчике успеха. «Попытка удаления», вероятно, записывается до вызова обработчика успеха из-за асинхронного характера этого ajax-вызова.
4. Когда вы говорите «диалоговое окно отображается нормально, с правильным eid , что вы имеете в виду? Вы не можете говорить о
eid
в URL-адресе ajax, так как это исправляетсяPHP
при загрузке страницы.5. Я просматриваю все ответы, и все они действительны. Они заставляют меня немного лучше видеть проблему (ы). В FF с использованием F12 я вижу, что фактический eid не предоставляется. Ответ на получение по сети выглядит следующим образом: «de.php?eid=» Итак, вопрос теперь в том, как мне получить значение eid, которое будет отображаться в URL-адресе?
Ответ №1:
Измените раздел ajax на post data.
Имейте данные в форме, а не повторяйте JS.
<form id="myform">
<input type="hidden" value="<?php echo $theEventId ?>">
<button type="submit" value="Delete">
</form>
Затем в JS сериализуйте форму.
var form_data = $("#myform").serialize();
Затем опубликуйте сериализованные данные.
$.ajax({
url: '/de.php',
type: 'POST',
data: form_data,
success: function(data) {
alert('success');
}, error: function (data) {
alert('failed');
}
});
Используйте инструменты разработчика в Google Chrome, чтобы посмотреть, было ли что-нибудь опубликовано и что это такое.
Комментарии:
1. Я попытался немного пройти по этому пути, просто чтобы посмотреть, и обнаружил, что несколько вещей упущено. Я добавил их и продвинулся немного дальше, но так и не смог заставить его даже вызвать код диалога подтверждения. Я знаю, что я довольно близок к своей реализации выше, поэтому буду заниматься этим сейчас.
2. Покажите мне, чего вы достигли, и я попробую помочь? Вы создали форму и сериализовали ее? Что вы получили в инструментах разработки Google Chrome?