Rails AJAX请求返回5次而不是一次

Ale*_*vin 5 ruby ajax ruby-on-rails

我正在尝试使用link_to:remote选项执行简单的AJAX请求并动态显示响应.问题是我得到5个响应而不是1个.为什么会发生这种情况?

page.html.erb:

<%= link_to item.title, item_path(item, :format => :js), :remote => true %>
Run Code Online (Sandbox Code Playgroud)

show.js.erb:

$("<%= escape_javascript render(:file => 'items/show.html.erb') %>").insertAfter('#sortable');
$('#show_item').slideDown();
Run Code Online (Sandbox Code Playgroud)

items_controller.rb:

def show
        @item = Item.find(params[:id])
        respond_to do |format|
            format.html
            format.js
        end
    end
Run Code Online (Sandbox Code Playgroud)

更新:我正在使用jQuery.Gemset包括Devise,paperclip和simple_form.使用时我也有类似的问题:用link_to确认.问题是,无论您按什么,此确认对话框都会显示5次.

生成的html中只有一个带有'sortable'id的项:

<ul id="sortable"> 
        <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span><a href="/items/10.js" data-remote="true">Another item</a></li> 
        <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span><a href="/items/9.js" data-remote="true">test</a></li> 
     </ul> 
Run Code Online (Sandbox Code Playgroud)

Bea*_*rtz 3

您在不同的链接上都遇到了这个问题,对吧?

您的链接处理程序已注册多次(您可以使用 Firefox 中的 firebug 或 chrome 中的开发人员工具轻松检查,只需单击链接并查看发送了多少请求,或使用 console.log 处理程序)

如果您动态注册远程链接(例如,在异步页面片段加载之后),则可能会发生这种情况,并且最简单的解决方法是将链接标记为已注册(例如,通过添加“已注册”类)并且不再注册这些链接,像这样

# Link registration
$('a.my_link:not(.registered)').click(function(e) {
  #your code here
}).addClass('registered');
Run Code Online (Sandbox Code Playgroud)

如果您自己没有用 jQuery 编写任何单击事件处理程序,请检查是否有为您执行此操作的库。寻找类似的东西:

$(document).ajaxComplete(function() {
  $('a[data-remote="true"]').click(function() {
    #some code here...
  });
});
Run Code Online (Sandbox Code Playgroud)