1

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

一切正常,但是当我选择另一个图形名称并单击函数时,我不仅拥有新图形,而且还得到了旧图形(作为请求),所以每次单击新图形时(让我们说8个名字)我会同时收到8个请求,并且会显示最新的ofc(但如果你签入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]);
          }
        })
    });

我想取消以前的 ajax 调用而不必刷新页面。我能做到吗?就像在函数的最开始放某种“停止”,真的不知道。我见过 ajaxName.abort() 解决方案,但我相信它不能应用于我需要的东西。

提前致谢。

添加:

Travis 的建议是这样的:

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 请求。

4

1 回答 1

2

看到这个答案: Abort Ajax requests using jQuery

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

var xhr;

j("#hour").everyTime(10000,function(i){
    xhr && xhr.abort();
    xhr = j.ajax();
});
于 2013-04-25T20:25:37.427 回答