我已经使用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();
});