ajax期间的全局变量调用未正确更新

时间:2014-02-25 16:07:26

标签: javascript jquery ajax browser

所以Javascript不是多线程的。但我有以下问题。 我使用来自setTimeout的函数的AJAX调用。我需要知道能够在重新安排函数之前区分何时有活动的AJAX调用 为此,我使用2个全局变量。所以代码结构如下:

setTimeout(some_function, 10000);     
window.ajax_running = 0;  
window.calls_so_far = 0;  
function some_function () {  
   if(window.ajax_running) {  
     setTimeout(some_function, 10000);    
     return;  
   }  
   window.ajax_running = 1;  
   $.ajax({  
   //various  
  success: function (data) {   
         window.calls_so_far = window.calls_so_far + 1;     
         console.log('Running calls: '  + window.calls_so_far);  
         if(window.calls_so_far >=  SOME_VALUE) {  
              //we are ok ajax has finished  
              window.ajax_running = 0;  
         }  
}  

简单的代码。问题是它不起作用。我在控制台中看到了:

正在通话:1 所以全局变量没有递增。就像每个AJAX调用看到原始值0并递增它一样(就好像有线程一样) 我在这里搞砸了什么?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

成功运行时,ajax调用已经完成,因此当你添加calls_so_far时,你没有运行这个调用。 我不确定为什么你需要调用“计数”,但如果只是另一个问题(在第一个完成后调用相同的函数,我会建议这种方法:

var counter;
counter = 0;

function recallSomeFunction() {
    setTimeout(some_function, 10000);     
}

function some_function () {        
 $.ajax({  
 //various  
 success: function (data) {   
     if (++counter < SOME_VAL) recallSomeFunction();
     //...
 },
 error: function ( jqXHR, textStatus, errorThrown )) {   
     recallSomeFunction()
     //...
 });
 }