#jquery #ajax
#jquery #ajax
Вопрос:
У меня есть следующая функция, которая открывает диалоговое окно jQuery UI с предупреждением об удалении записи. Все работает нормально, кроме POST с AJAX. Я получаю ответ «успешно», но я не верю, что попал на страницу .php, которая должна выполнить запрос. Я что-то здесь упускаю?
var $dialog = $("#dialog").dialog({ autoOpen: false, resizable: false, modal: true });
$(".delProj").click(function(){
var delURL = $(this).attr("href").split("#");
var projID = delURL[1];
$dialog.dialog("open");
$("#dialog").dialog({
buttons: {
"Yes, delete this test": function() {
$.ajax({
type: "POST",
url: "http://www.example.com/inc/db_actions.php",
data: "op=DeleteProjectamp;delete=" projID,
success: function(){
// alert( "Test Project deleted successfully." );
$("#" projID).remove();
}
});
$(this).dialog("close");
},
"No, keep it.": function() {
$(this).dialog("close");
}
}
});
});
Комментарии:
1. Почему вы не верите, что это не публикация на странице? Вы всегда можете выполнить эхо из php-скрипта. Вы также можете использовать firebug для обратной проверки сообщения и ответа.
2. Глядя на параметр URL вашего ajax-запроса, вы уверены, что попали на страницу php в том же домене, откуда загружается страница? В противном случае междоменная политика приведет к сбою вашего вызова ajax.
Ответ №1:
Сделайте так, чтобы ваша php-страница называлась echo something
PHP
echo 'hello world';
Javascript
Добавьте возвращаемое значение обратного вызова (здесь data
) и попробуйте отобразить его с помощью js.
[..]
success: function(data){
alert(data);
}
[…]
Комментарии:
1. Да, нет необходимости в каких-либо сложных тестах. Это будет сделано просто отлично и сведет к минимуму вероятность возникновения любых посторонних ошибок.
Ответ №2:
Обычно я отправляю некоторую форму ответа через данные в формате JSON, чтобы мои AJAX-запросы знали, выполнили ли они то, что намеревались сделать. Что-то вроде:
Скрипт:
$.ajax({
type: "POST",
url: "http://www.mydomain.com/inc/db_actions.php",
data: "op=DeleteProjectamp;delete=" projID,
success: function(data){
if(data.success == true)
{
$("#" projID).remove();
}
});
PHP:
// do something
echo json_encode(array('success'=>true));
Редактировать:
Также обычно полезно отслеживать ваши ошибки ajax:
$.ajax({
type: "POST",
url: "http://www.mydomain.com/inc/db_actions.php",
data: "op=DeleteProjectamp;delete=" projID,
success: function(data){
if(data.success == true)
{
$("#" projID).remove();
}
},
error: function(){
alert('something bad happened');
}
});
Комментарии:
1. и если вы собираетесь пойти на такие большие проблемы, стоит отметить, что вы действительно хотите получить параметры ошибки из jQuery, а не отбрасывать их 😉
2. @drachenstern: абсолютно верно — но тогда вы хотели бы перейти к другому обсуждению о настройке правильных заголовков для 500 ошибок и т.д., Но это другое обсуждение 😉