我已经使用jQuery.everyTime()函数进行了ajax调用。
我有一个组合框,在其中选择一些图形名称并动态调用ajax函数,返回json并每10秒在“视图”中创建图表。

一切正常,但是当我选择另一个图形名称并单击函数时,我不仅拥有新图形,而且还得到了旧图形(作为请求),所以每次我单击一个新图形时(让我们说8个名字)我会同时收到8个请求,并且会显示最新的请求(但是如果您在Firebug中签入,则会看到8个请求)。

这是我的ajax函数:

var selected = $("#name_list :selected").val();

    $(".title_graph").text(selected);

    var j = jQuery.noConflict();
    j("#hour").everyTime(10000,function(i){
        j.ajax({
          type: "GET",
          url: "getchartdata?graphName=" + selected +"&subgroup=hour",
          cache: false,
          success: function(jsonData){
              var data = eval(jsonData);
              drawChart(data, data[0][0], data[0][1]);
          }
        })
    });


我想取消previus ajax调用而不必刷新页面。我能做到吗?就像在函数的开头放置一些“停止”一样,不是很清楚。我见过ajaxName.abort()解决方案,但我认为它不能应用于我需要的解决方案。

提前致谢。

添加:

特拉维斯的建议现在是这样的:

function getChartsByGraphName() {
    var selected = $("#name_list :selected").val();
    var ajaxCallHour;
    $(".title_graph").text(selected);

    var j = jQuery.noConflict();
    j("#hour").everyTime(10000,function(i){
        ajaxCallHour && ajaxCallHour.abort();
        ajaxCallHour = j.ajax({
          type: "GET",
          url: "getchartdata?graphName=" + selected +"&subgroup=hour",
          cache: false,
          success: function(jsonData){
              var data = eval(jsonData);
              drawChart(data, data[0][0], data[0][1]);
          }
        })
    });
    }


但是它仍然在发送旧的ajax请求。

最佳答案

查看此答案:Abort Ajax requests using jQuery

everyTime之外创建一个存储xhr的变量,然后在发出新变量之前将其停止。

var xhr;

j("#hour").everyTime(10000,function(i){
    xhr && xhr.abort();
    xhr = j.ajax();
});

07-24 18:00
查看更多