Rails UJS link_to:remote执行AJAX GET和普通的<a href> GET

Ric*_*ael 1 jquery ruby-on-rails ujs

编辑:

除了下面的有用评论之外,史蒂夫施瓦茨的两篇优秀文章清楚地解释了一切:

Rails 3.2.2/jquery-rails 2.0.1 (使用jquery 1.7.1)

我有链接发送AJAX请求以向表单添加其他文件上载字段. 与页面相关的所有内容都能正常工作 - 从服务器检索新的表单字段HTML片段并将其附加到表单内的div.

然而,

服务器收到两个GET请求.一个是AJAX请求; 另一个似乎是"正常"锚元素GET.我预计Rails UJS会阻止"正常"的GET.

我应该自己禁用正常的链接操作吗?有人可以解释一下我误解了什么,以及我应该做些什么[防止第二次请求]?

我已经看到了这个问题:Rails 3 UJS - 控制器被link_to调用两次:remote.因此,我尝试更改资产管道编译config.assets.debug = false,但它没有任何效果.而且,这不是双AJAX GET请求,所以我认为这是一个不同的问题.

谢谢你的帮助!

服务器日志片段:

Started GET "/files/new?asset_number=2" for 127.0.0.1 at 2012-03-23 15:23:27 +0100

Started GET "/files/new" for 127.0.0.1 at 2012-03-23 15:23:27 +0100
Run Code Online (Sandbox Code Playgroud)

浏览器HTML:

<a href="/files/new" data-remote="true" id="add_another_file" position="after" update="files">Add another file</a>
Run Code Online (Sandbox Code Playgroud)

视图:

<%= link_to 'Add another file', new_file_path, :remote   => true,
                                               :update   => 'files',
                                               :position => 'after',
                                               :id       => 'add_another_file' %>
Run Code Online (Sandbox Code Playgroud)

控制者的咖啡因:

$( ->
  $('a#add_another_file').click( ->
    url = '/files/new?asset_number=' + $('#files input').length
    $.get(url, ((data) -> $('#files').append(data)), 'html')))
Run Code Online (Sandbox Code Playgroud)

nic*_*ckh 5

如果您要添加click事件a#add_another_file,则不需要使用:remote => true,因为您手动发出Ajax请求.

此外,该click事件应防止发生默认操作.这可以通过添加event.preventDefault();click事件的回调的开头来实现.请注意,回调需要接受event参数.


nic*_*ckh 5

如果要使用该:remote => true选项,则应删除已添加的自定义单击事件.这是因为该:remote => true选项告诉*jquery_ujs*库劫持点击次数a#add_another_file.因此,您无需创建自己的HTTP请求.

接下来,要确定响应的内容,请绑定将要发生的各种事件a#add_another_file,例如成功错误.

是您可以绑定到的Ajax事件完整列表.