2014-01-29 72 views
0

我想通過$.ajax()中止請求,但我一直在收到Uncaught TypeError: Object 5 has no method 'abort'5號碼在更多次點擊後更改爲10,然後如果再次點擊一次,則只會繼續向上。我使用下面的代碼:未捕獲的TypeError:對象{number}沒有方法'abort'

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

正如錯誤所述,數字沒有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; 
    } 
}); 
+0

謝謝:)是'clearTimeout()'和'中止()'同樣的事情,但' clearTimeout()'只是中止'setTimeout()'? – Erik

+0

@ErikEdgren:'clearTimeout'和'abort'不相關。 'clearTimout'清除計劃的計時器。如果您在定時器啓動之前調用它,則您計劃的功能將不會運行。在這種情況下,這意味着你永遠不會調用'$ .ajax'。 'abort'用於中止正在進行的XHR請求。 –

+0

好的。非常感謝。我會盡快接受你的回答 – Erik

0

setTimeout()返回

the numerical ID of the timeout, which can be used later with window.clearTimeout().

>>> var x = window.setTimeout(function(){}, 1000) 
undefined 
>>> x 
102 
>>> typeof x 
"number" 

我懷疑你想要的文檔建議:

window.clearTimeout(load_info); 
相關問題