2013-05-24 3 views
19

У меня ОЧЕНЬ простой вызов jQuery Ajax (см. Ниже). Выполняется вызов Ajax, и я вижу на панели Firebug Net, что сервер вернул 200 OK и вернул строку «ОК», как и следовало ожидать. Однако выполняемые и отказоустойчивые функции не срабатывают! Очень расстраивает!jquery ajax done function not firing

(«до» и «после» оповещений DO огня.)

Для простоты (и в качестве метода отладки) я раздела это вниз, это самый голый скелет, но до сих пор обработчики не будут стрелять. Что я не вижу здесь?

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

Метод ajax не выполнил и не дал вариантов. То, что вы ищете, - это успех и ошибка. –

ответ

44

Вы должны приковать done() и fail() функции, они не являются частью параметров объекта, используемого в $.ajax:

$.ajax({ 
    type: "POST", 
    url : postUrl, 
    data: dataToPost 
}).done(function() { 
    alert("Success."); 
}).fail(function() { 
    alert("Sorry. Server unavailable. "); 
}); 

Кроме того, как Ajax является асинхронным, не удивляйтесь, если «после предупреждения» перед предупреждением «успех».

+0

Спасибо большое! Это работало как чемпион. Я перешел с старых примеров успеха и ошибок, чтобы сделать это и потерпеть неудачу. – misterrobinson

+0

@misterrobinson - Да, это может быть странно запутанным, но новые методы не являются частью объекта, поскольку они гораздо более универсальны, и могут быть использованы на любом отложенном/обещании, например, как функция $ .ajax возвращает. – adeneo

13

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 
    } 
}); 
+0

Спасибо большое! Это работало как чемпион. Я перешел с старых примеров успеха и ошибок, чтобы сделать это и потерпеть неудачу. – misterrobinson

5

Также и нужно DATATYPE: '' JSON. У меня была эта проблема, когда я поставил его в «строку», и это не срабатывает проделанных методу

3

Я имею такую ​​же установку, как это:

$.ajax({ 
    type: "POST", 
    url : postUrl, 
    data: dataToPost 
}).done(function() { 
    alert("Success."); 
}) 

и столкнулся с той же проблемой: проделанная функции не будет срабатывать. Хотя мне удалось заставить его работать много раз раньше с тем же набором, мне потребовалось некоторое время, чтобы выяснить, что произошло. После настройки, я обнаружил, что это также зависит от типа данных, возвращаемых вызовом Ajax. Первоначально я настроил вызов ajax для возврата некоторого HTML. Выполненная функция не работает. После того, как я изменил его на json (с jsonify в Flask), он снова работает.