2010-09-01 70 views
3

我正在使用Rails 3和JQuery 1.4.2,并试图绑定到给定的远程表单提交上的ajax:failure回调。回调工作正常,但是,返回的xhr变量似乎以某种方式失去了responseText属性。jQuery和Rails 3 ajax:失败回调

这里是我的代码如下所示:

_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

我想出了答案,但很困惑,为什么它是如此。通过使用下面的代码片段

$.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:所以rails.js触发AJAX就像我想的那样。

所以,

console.log(status.responseText) 

吐出我的响应文本。

正确绑定应该像这样

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

由于第一个变量是触发事件。

+0

我也意识到为什么变量不匹配。显然,因为我绑定了事件,所以第一个传入的变量将会是实际的事件,并且xhr,status和错误也会在它之后传递。 – ncavig 2010-09-01 21:24:16