2013-07-15 30 views
1

我在JavaScript函數中有我的AJAX請求。使用setInterval函數,AJAX函數每5000ms執行一次。如果同一請求正在執行,則跳過AJAX功能

我想知道是否有辦法檢查以前的AJAX調用是否仍在處理,所以我沒有多個AJAX請求相同。

這裏是我的代碼:

function getData(fields){ 
    $.ajax({ 
     url: 'index.php', 
     type: 'post', 
     data: { fields: fields }, 
     dataType: 'json', 
     success: function(json) {                      
     if (json) { 
      // We have a response 
     } 
    }); 
} 

window.setInterval(function(){ 
    getPosts(fields); 
}, 2000); 

提前感謝!

彼得

回答

3
var req; 

讓我們可以訪問的功能範圍之外的變量。

function getData(fields) { 
    req = $.ajax({...}); 

的變量分配給Ajax請求

setInterval(function() { 
    if (req.state() == 'resolved' && req.state() !== 'pending') { 
     getPosts(fields); 
    } 
}); 

檢測的.state()

+0

您可能要檢查'== 「待定」! '反而......以防萬一它失敗 – Ian

+0

優秀!有用。唯一的問題是req.state()未定義,因爲該函數沒有執行,因此req.state()將是未定義的。我只是添加了onload函數來解決這個問題!謝謝你:) –

+0

@Ian我還沒有遇到這個問題,但我已經添加它,以放心。 – Ohgodwhy

1

試試這個:

var getDataRequest = null; 
function getData(fields) { 
    if (getDataRequest !== null) { 
     return; 
    } 
    getDataRequest = $.ajax({ 
     url: 'index.php', 
     type: 'post', 
     data: { fields: fields }, 
     dataType: 'json', 
     success: function(json) { 
      if (json) { 
       // We have a response 
      } 
      getDataRequest = null; 
     } 
    }); 
} 

window.setInterval(function() { 
    getPosts(fields); 
}, 2000); 
相關問題