【问题标题】:rails 3 - ajax form ajax:success event not being calledrails 3 - ajax form ajax:未调用成功事件
【发布时间】:2012-02-16 17:26:12
【问题描述】:

经过多次故障排除,我无法弄清楚为什么我的表单的 ajax:success 回调没有在 rails 3 中被调用。

以下是我认为最终生成的代码:

JS 代码:

$(function() {
  $("#myform").bind('ajax:success', function(data, status, xhr) {
    alert("form success");
    console.log(data);
    console.log(status);
  }).bind('ajax:error', function(xhr, status, error) {
    console.log(error);
    console.log(status);
  });
});

Ajax 表单:

<form accept-charset="UTF-8" action="/myc/mya" data-remote="true" id="myform" method="post">       <div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="hZuhxwboQj2qo8MPIR8DWwYMqAC1V2yqG+DX9UnlIr0=" /></div>
          <input class="large" id="foo" name="foo" type="text" />
        <input class="btn success" data-disable-with="Working..." name="commit" type="submit" />
        </form>

遵循表单发布到的操作中发生的逻辑:

 @foo = { :foo => "bar" }
 render(:json => @foo.to_json, :content_type => 'application/json',
        :layout => false)

我已经 Firebugged 整个请求/响应:

It says 200 OK. And the Response Headers are:

Cache-Control   max-age=0, private, must-revalidate
Connection  Keep-Alive
Content-Length  13
Content-Type    application/json; charset=utf-8
Date    Mon, 23 Jan 2012 10:37:19 GMT
Etag    "9bb58f26192e4ba00f01e2e7b136bbd8"
Server  WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
Set-Cookie  _session_id=BAh7CkkiD3Nlc3Npb25faWQGOgZFRiIlMGIzZGRhZDQ2ZjNmYzUzOWJkMzBkZWMxZDBmMDgwODZJIhBfY3NyZl90b2tlbgY7AEZJIjFoWnVoeHdib1FqMnFvOE1QSVI4RFd3WU1xQUMxVjJ5cUcrRFg5VW5sSXIwPQY7AEZJIhJyZXF1ZXN0X3Rva2VuBjsARkkiMGlCVmFZYllrU2R1RHl2aVZ4ZGc3ZWxKdmVxZkdFa1VKYWVXaHU0eXBmR1kGOwBUSSIZcmVxdWVzdF90b2tlbl9zZWNyZXQGOwBGSSIwcFdGTUVTUGt6d2VSY1pzV2YxU3JLNmFJSEpCU3FGMDh2ZmZ2U0pFaVI4cwY7AFRJIhRjdXJyZW50X3VzZXJfaWQGOwBGSSIpZDZiZDdhMjYtNDRjNi0xMWUxLTkwMDItZmExMjJjNjJmZTFmBjsARg%3D%3D--78099c697506ede3c7e9a833efa1785c6f1b9a6e; path=/; HttpOnly
X-Runtime   0.354051
X-Ua-Compatible IE=Edge

响应如预期:

{"foo":"bar"}

200 OK 响应应该在我的 JS 中触发 'ajax:success' ......但这没有发生。有什么想法吗?错误回调也没有被命中...

【问题讨论】:

  • JS 控制台中的任何内容? JS 中缺少的括号是错字吗?
  • 不,JS 控制台中没有错误.. 修复了括号以防万一,但仍然无法正常工作。如果 'ajax:success' 事件已绑定到表单并且已绑定,还会在控制台中进行检查。
  • 更新问题中的代码,然后;它会把他们的人赶走。没有“以防万一”;没有它,JS 就坏了。

标签: jquery ruby-on-rails ajax forms


【解决方案1】:

我遇到了完全相同的问题,您自己的answer 对您的问题也有帮助。但我认为这只是解决实际问题的一种解决方法。出现这个问题有两种可能的情况:

  1. 您已从 Rails 2 升级到 3,并且仍在使用原型库(请参阅 Rails 3 AJAX remote form call backs

  2. 您已经嵌入了两个 jQuery 库(这是我的问题)

如果有另一个库与 jQuery 冲突,请查看您的 html 源代码。

【讨论】:

    【解决方案2】:

    它适用于表单 ID 喜欢:

    $("form#some_id").bind('ajax:success', function(){ ..... })
    

    【讨论】:

      【解决方案3】:

      我也有同样的问题。经过 90 分钟的搜索,我终于通过以下方式让它工作:

      $(document).on('ajax:success', '.delete', function(e) {
          $(e.currentTarget).closest('div').fadeOut();
      });
      

      归功于:https://stackoverflow.com/users/1609186/ivan-fong

      我正在创建然后尝试删除我刚刚创建的内容,所有这些都是通过 ajax 请求进行的。希望这可以帮助某人。

      【讨论】:

        【解决方案4】:

        在这上面浪费了很多时间之后,我终于通过以下方式让它工作了:

        1) 将 'ajax:success' 绑定移动到 application.js 而不是在我的部分标签中。

        2) 将 $(function() { }) 更改为 jQuery(function($) { })

        不完全确定上述两个步骤为何能解决问题,但确实如此。希望对您有所帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-12
          • 1970-01-01
          • 2019-01-12
          • 2021-01-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-02
          相关资源
          最近更新 更多