Подтвердить что ты не робот

Функция 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");
4b9b3361

Ответ 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), он снова работает.