我想通过$.ajax()
中止请求,但我会继续Uncaught TypeError: Object 5 has no method 'abort'
。再次点击后,5
号码会更改为10
,如果再点击一次,它就会继续上升。我使用以下代码:
var load_info = '';
$('body').on('click', '#moreinfo', function() {
load_info = setTimeout(function(){
$.ajax({
url:'file.php',
method:"GET",
success:function(s){ alert(s); },
error:function(e){ alert(e); }
})
},2000);
});
$('body').on('click', '#cancel', function() {
load_info.abort();
});
Demo at jsFiddle(调出浏览器控制台查看错误)
如何使此功能起作用?
答案 0 :(得分:0)
如错误所示,数字没有abort
方法。您的load_info
是一个数字,setTimeout
返回的句柄。它不是XHR或jqXHR对象。
如果要取消计时器(防止ajax请求启动),请使用:
clearTimeout(load_info);
如果要在启动时取消正在进行的ajax调用,则必须从ajax
获取XHR对象,然后在其上调用abort
,如下所示:
var loading_xhr = null;
$('body').on('click', '#moreinfo', function() {
setTimeout(function(){
loading_xhr = $.ajax({
url:'file.php',
method:"GET",
success:function(s){ alert(s); },
error:function(e){ alert(e); },
complete:function(){
// Be sure to clear it again here
loading_xhr = null;
};
})
},2000);
});
$('body').on('click', '#cancel', function() {
if (loading_xhr) {
loading_xhr.abort();
loading_xhr = null;
}
});
答案 1 :(得分:0)
setTimeout()会返回数字:
超时的数字ID,稍后可以使用 window.clearTimeout()。
>>> var x = window.setTimeout(function(){}, 1000)
undefined
>>> x
102
>>> typeof x
"number"
我怀疑你想要文档建议的内容:
window.clearTimeout(load_info);