我使用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请求。
答案 0 :(得分:2)
请参阅此答案:Abort Ajax requests using jQuery
在everyTime
之外创建一个存储xhr的变量,然后在发出新变量之前将其停止。
var xhr;
j("#hour").everyTime(10000,function(i){
xhr && xhr.abort();
xhr = j.ajax();
});