未捕获的TypeError:对象{number}没有方法'abort'

时间:2014-01-29 17:43:17

标签: jquery abort uncaught-typeerror

我想通过$.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(调出浏览器控制台查看错误)

如何使此功能起作用?

2 个答案:

答案 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);