如何停止ajax调用并使用新参数启动一个新调用?

时间:2013-04-25 20:15:49

标签: javascript ajax jsp

我使用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()解决方案,但我相信它无法应用于我需要的东西。

提前致谢。

增加:

现在看看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请求。

1 个答案:

答案 0 :(得分:2)

请参阅此答案:Abort Ajax requests using jQuery

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

var xhr;

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