Функция jquery ajax done не срабатывает
У меня есть ОЧЕНЬ простой вызов jQuery Ajax (см. ниже). Выполняется вызов Ajax, и я вижу на панели Firebug Net, что сервер вернул 200 OK и вернул строку "ОК", как и следовало ожидать. Однако выполняемые и отказоустойчивые функции не срабатывают! Очень расстраивает!
(Предупреждения "before" и "after" срабатывают.)
Для простоты (и в качестве метода отладки) я разделил это на самый голый скелет, но все же обработчики не будут запускаться. Что я не вижу здесь?
postUrl= "/mod/users/check_email/";
dataToPost= { email: "[email protected]" };
alert("before");
$.ajax
({
type: "POST",
url: postUrl,
data: dataToPost,
done: function()
{
alert("Success.");
},
fail: function()
{
alert("Sorry. Server unavailable. ");
},
}); // end Ajax call
alert("after");
Ответы
Ответ 1
Вам нужно связать функции done()
и fail()
, они не являются частью объекта опций, используемого в $.ajax
:
$.ajax({
type: "POST",
url : postUrl,
data: dataToPost
}).done(function() {
alert("Success.");
}).fail(function() {
alert("Sorry. Server unavailable. ");
});
Кроме того, поскольку ajax является асинхронным, не удивляйтесь, если перед предупреждением "success" появляется предупреждение "after".
Ответ 2
success
и error
можно использовать обратные вызовы. Для done
и fail
вам нужно сделать:
$.ajax({
type: "POST",
url: postUrl,
data: dataToPost,
}).done(function() {
alert("Success.");
}).fail(function() {
alert("Sorry. Server unavailable. ");
});
Или:
$.ajax({
type: "POST",
url: postUrl,
data: dataToPost,
success: function() {
//code here
}
});
Ответ 3
Также вам нужен dataType: 'json'. У меня была эта проблема, когда я установил ее в строку, и она не запускает выполненный метод
Ответ 4
У меня такая же настройка:
$.ajax({
type: "POST",
url : postUrl,
data: dataToPost
}).done(function() {
alert("Success.");
})
и столкнулся с той же проблемой: функция done не сработала. Хотя мне удалось заставить его работать много раз раньше с тем же набором, мне потребовалось некоторое время, чтобы выяснить, что произошло. После настройки, я обнаружил, что это также зависит от типа данных, возвращаемых вызовом Ajax. Первоначально я настроил вызов ajax для возврата некоторого HTML. Выполненная функция не работает. После того, как я изменил его на json (с jsonify в Flask), он снова работает.