2010-09-01 2 views
3

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

Вот что мой код выглядит следующим образом:

_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]); 
} 

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

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

ответ

6

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

$.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) { 

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

+0

Я также понял, почему вары не совпадают. Видимо, поскольку я привязываюсь к событию, первая переменная, переданная в, будет фактическим событием, которое будет передано с xhr, статусом и ошибкой, также передаваемой после него. – ncavig