rails 3 - ajax形式ajax:未被调用的成功事件

der*_*use 8 forms ajax jquery ruby-on-rails

经过多次故障排除后,我无法弄清楚为什么我的表单是ajax:在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);
  });
});
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

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

我有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
Run Code Online (Sandbox Code Playgroud)

正如预期的那样:

{"foo":"bar"}
Run Code Online (Sandbox Code Playgroud)

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

小智 10

我有同样的问题.经过90分钟的搜索,我终于通过以下方式使用它:

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

感谢:https://stackoverflow.com/users/1609186/ivan-fong

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


der*_*use 3

在浪费了很多时间之后,我终于通过执行以下操作使其发挥作用:

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

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

不太清楚为什么上述两个步骤可以解决问题,但确实可以。希望能帮助到你!