JQuery и Rails 3 ajax: сбой обратного вызова - PullRequest
3 голосов
/ 01 сентября 2010

Я использую Rails 3 и JQuery 1.4.2 и пытаюсь привязать к обратному вызову ajax: fail при заданной удаленной отправке формы. Обратный вызов работает нормально, однако переданная обратно переменная xhr, похоже, как-то теряет атрибут responseText.

Вот как выглядит мой код:

_form.html.haml

= form_for(object, :remote => true) do |f|
  = form fields and such...

где-то Javascript ...

 $('form').livequery('ajax:loading', function() {
    // what to do on ajax loading
}).livequery('ajax:success', function(data, status, xhr) {

}).livequery('ajax:failure', function(xhr, status, error) {
    alert(xhr.responseText);
});

Я в основном отрисовываю сообщения об ошибках объекта от контроллера, чтобы я мог отображать уведомления об ошибках в этом обратном вызове. Странно то, что я вхожу в rails.js, строки 49-51

error: function (xhr, status, error) {
  el.trigger('ajax:failure', [xhr, status, error]);
}

и вручную написать в тексте отклика консоли, он работает так, как я ожидал.

Я что-то не так делаю? Как изменится объект xhr с rails.js на мою привязку?

1 Ответ

6 голосов
/ 01 сентября 2010

Я разобрался с ответом, но не понимаю, почему это так. Поэтому rails.js запускает событие ajax: fail, используя следующий фрагмент кода

$.ajax({
    url: url,
    data: data,
    dataType: dataType,
    type: method.toUpperCase(),
    ...
    error: function (xhr, status, error) {
        el.trigger('ajax:failure', [xhr, status, error]);
    }
});

Когда я связываюсь с этим событием,

$('form').livequery('ajax:failure', function(xhr, status, error) {

Кажется, что статусная переменная имеет атрибут responseText, а не xhr, как я мог бы подумать.

Итак,

console.log(status.responseText)

выплевывает мой ответный текст.

Правильная привязка должна выглядеть следующим образом

('form').livequery('ajax:failure', function(event, xhr, status, error) {

Поскольку первая переменная - это событие, которое сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...