2013-07-15 25 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); 
相关问题