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)
如果您要添加click事件a#add_another_file,则不需要使用:remote => true,因为您手动发出Ajax请求.
此外,该click事件应防止发生默认操作.这可以通过添加event.preventDefault();到click事件的回调的开头来实现.请注意,回调需要接受event参数.
如果要使用该:remote => true选项,则应删除已添加的自定义单击事件.这是因为该:remote => true选项告诉*jquery_ujs*库劫持点击次数a#add_another_file.因此,您无需创建自己的HTTP请求.
接下来,要确定响应的内容,请绑定将要发生的各种事件a#add_another_file,例如成功和错误.
| 归档时间: |
|
| 查看次数: |
4372 次 |
| 最近记录: |