rails ajax请求

时间:2012-04-15 16:23:09

标签: ruby-on-rails ajax ruby-on-rails-3

发送Ajax请求时遇到问题。当你点击链接时,请求被发送到服务器3次并且答案没有到来。

为什么请求被发送三次以破坏?

我在查询的形成中出了什么问题?

代码:

run.html.erb

...
<%= link_to "Next", "#", :id => 'next', :class =>
...

run.js.erb

(function(){

  $("#next").click(function(){

    $.ajax({
      type: 'POST',
      url: '/engine/tff',
      success: function(data){
        alert("ok");
        $("#question").html(data);
      }
    });


    return false;
  });
});

控制器

def tff
    respond_to do |format|
      format.js render :text => "hello"
    end
end

2 个答案:

答案 0 :(得分:2)

我猜测点击事件被绑定多次,可能是因为脚本被多次调用。不确定多次通话的原因是什么,因为我不熟悉rails。

你可以采取哪些措施来避免它在绑定之前取消绑定点击事件或使用on api。

function ajaxRequest(){
    $.ajax({
      type: 'POST',
      url: '/engine/tff',
      success: function(data){
        alert("ok");
        $("#question").html(data);
      }
    });
    return false;
  }

$("#next").unbind("click").bind("click",ajaxRequest);

$(document).on("click","#next",ajaxRequest);

也不确定您是否尝试绑定文档就绪并且代码中存在拼写错误。但它应该像这样包装:

$(function(){
  $("#next").click(ajaxRequest);
});

答案 1 :(得分:1)

我最近碰到的一件事是jquery尝试运行结果,因为默认的dataType将.js解释为脚本而不是文本。您可能需要在ajax调用中添加dataType: "text"。我不知道这会如何转化为三个电话。

我认为返回false应该可以防止点击继续进行,但也许最好使用preventDefault()作为apneadiving建议。