【问题标题】:JQuery and Rails 3 ajax:failure callbackJQuery 和 Rails 3 ajax:失败回调
【发布时间】:2011-04-06 22:04:13
【问题描述】:

我正在使用 Rails 3 和 JQuery 1.4.2 并试图绑定到给定远程表单提交的 ajax:failure 回调。回调工作正常,但是,传回的 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]);
}

并手动写入控制台 responseText,它的工作方式符合我的预期。

我做错了吗? xhr 对象将如何从 rails.js 更改为我的绑定?

【问题讨论】:

    标签: jquery ajax events callback ruby-on-rails-3


    【解决方案1】:

    我找到了答案,但对为什么会这样感到困惑。所以rails.js通过使用下面的代码sn-p来触发一个ajax:failure事件

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

    status var 似乎具有 responseText 属性,而不是我想象的 xhr。

    所以,

    console.log(status.responseText)
    

    吐出我的回复文本。

    正确的绑定应该是这样的

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

    因为第一个变量是触发的事件。

    【讨论】:

    • 我也意识到变量不匹配的原因。显然,由于我绑定到事件,传入的第一个变量将是引发的实际事件,xhr、状态和错误也在它之后传递。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 2015-07-25
    • 2018-02-07
    相关资源
    最近更新 更多