Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用link_to:remote=>;跟踪ajax调用;真的_Javascript_Jquery_Ruby On Rails_Ajax - Fatal编程技术网

Javascript 如何使用link_to:remote=>;跟踪ajax调用;真的

Javascript 如何使用link_to:remote=>;跟踪ajax调用;真的,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,我正在尝试实现一个表,其中包含使用ajax扩展和折叠每一行的选项 我使用的是link\u to:remote=>true,工作正常,问题是当我多次单击时,所有调用都保持活动状态。我想知道如果用户崩溃或请求新的呼叫,如何跟踪这些呼叫并丢弃它们。因为我没有自己调用$.ajax,所以我不知道怎么做 这是我的密码 index.html.haml: %tr{ :class => 'cmp_row'} %td = link_to "+", user_comp

我正在尝试实现一个表,其中包含使用ajax扩展和折叠每一行的选项

我使用的是
link\u to:remote=>true
,工作正常,问题是当我多次单击时,所有调用都保持活动状态。我想知道如果用户崩溃或请求新的呼叫,如何跟踪这些呼叫并丢弃它们。因为我没有自己调用$.ajax,所以我不知道怎么做

这是我的密码

index.html.haml

%tr{ :class => 'cmp_row'}
          %td
            = link_to "+", user_company_details_path(company_id), :remote => true , :method => :post, :cache => false, :class => "cmp_exp_link", :id => "#{company_id}
application.js.erb

$('.cmp_exp_link').click(function (e) {
  var cmp_id = e.target.id
  if($(this).text() === "+"){
    $("<tr id='details_row_"+cmp_id+"'><td colspan = 11 id='details_cell_"+cmp_id+"' style='text-align:center' > </td> </tr>").insertAfter($(this).closest(".cmp_row"));
    $("#details_cell_"+cmp_id).html("<img src='/assets/colorbox/loading.gif' >")
    $(this).text("-");

  }else{
    $(this).text("+");
    $("#details_row_"+cmp_id).remove();
    return false;
  }
});
user\u controller.rb

def company_details

    @results = @data
    respond_with(@results)

  end

提前多谢

根据您从评论中收集的信息,您可以使用取消当前请求,但是,我觉得不得不写一个答案


JQuery ujs.js

我强烈建议不要更改JQuery ujs文件(除非您计划向Rails repo提交要点),主要是为了兼容性。它是Rails资产管道的一个核心组件,需要不断更新才能与Rails更新保持一致

相反,我建议使用&:


这可能有效,也可能无效,但我建议您不要自定义核心Rails依赖项:)

您可以尝试添加onclick处理程序:
if(ajax){ajax.abort();}
?看看这个,我也不认为你真的需要担心这个:当你扩展一行时,你使用ajax来填充它,但是在那之后,你会正常地折叠和扩展它,不是吗?Ie,每行只需执行一次ajax加载:扩展时,您可以查看行中是否有任何内容,如果为空,则执行ajax调用,如果已填充,则只显示内容。感谢各位的帮助,但在firebug上,我看到所有调用都在加载,我不想创建所需的额外流量,这个表会很长,也许每次调用都会检索到很多记录。我只想不加载重复的调用,或者如果用户崩溃,则停止当前调用。谢谢@MrYoshiji:)我正在修改jquery-ujs.js,在那里进行实际的ajax调用,并且我正在使用您指向的答案。:)太好了,你应该发布你自己的答案,以便给其他开发人员一些提示;)我还对生成的代码感兴趣是的,我的TL告诉我同样的,我自己在application.js.erb上进行ajax调用,我使用这个问题()的代码在调用过程中禁用扩展链接的功能。我认为您的想法更有效,可以消除正在进行的和不希望发生的呼叫(当有人在呼叫结束前崩溃时),非常感谢您的帮助:)
def company_details

    @results = @data
    respond_with(@results)

  end
#app/assets/javascripts/application.js
$(document).on("click", "#table_row", function() {
    $.ajax({ 
        url: $(this).attr("your-link-attr"),
        data: $(this).attr("data-something"),
        success: function(data) {
            //Returned Data
        }
    })
});

$(document).ready(
    var xhr;

    var fn = function(){
        if(xhr && xhr.readyState != 4){
            xhr.abort();
        }
        xhr = $.ajax({
            url: 'ajax/progress.ftl',
            success: function(data) {
                //do something
            }
        });
    };

    var interval = setInterval(fn, 500);
);