2012-12-31 68 views
0

刷新頁面時是否可以停止以下代碼的請求/響應超時?在jQuery中停止XHR請求

setInterval(function(){ 
    var xhr = $.ajax({ 
    url:'/ajax_controller/searchForTracks/'+logged_user_id, 
    success: function(data){ 
     console.log(data+' tracks added'); 
      } 
     }); 
    },5000); 

我曾嘗試:

$(window).unload(function(){ 
      xhr.abort(); 
     }); 

window.onbeforeunload = function(){ 
     throw new error('Aborting javascript'); 
    } 

,但沒有任何事情對我的作品。我只是想立即刷新頁面,不要等到xhr請求在我的URL上完成(因爲它有時需要幾分鐘);

+0

你的控制檯是否收到任何javascript錯誤?它看起來可能會拋出一個'xhr'未定義的錯誤。 –

+0

不,我沒有收到任何錯誤。我只有在使用throw new error時纔會得到中止javascript;但它仍然等待/ ajax_controller/searchForTracks /上的當前XHR完成。我需要中止當前的等待並立即刷新。 – roshkattu

+0

根據'$ .ajax'文檔,它返回一個'XMLHttpRequest',它支持'.abort()'方法,它被描述爲你想要的。當你在你的'$(window).unload'函數中放置一個斷點時,它是否會進入並使xhr正確填充? –

回答

0

我認爲這個問題是在這裏:

setInterval(function(){ 
    var xhr = $.ajax({... <--- 
},5000); 

你初始化裏面的回調函數變量,所有你需要做的是:

var xhr; 
setInterval(function(){ 
    xhr = $.ajax({... 
},5000); 

,然後你可以做

console.log(xhr); // Object... 

另外我建議緩存setInterval所以你可以做

var myInterval =  setInterval(function(){ 
     xhr = $.ajax({... 
    },5000); 

,如果你需要取消間隔,只是做

clearTimeout(myInterval); 

TLDR:這是一個範圍的問題。