Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ajax调用期间的全局变量未正确更新_Javascript_Jquery_Ajax_Browser - Fatal编程技术网

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

Javascript ajax调用期间的全局变量未正确更新,javascript,jquery,ajax,browser,Javascript,Jquery,Ajax,Browser,所以Javascript不是多线程的。但我有以下问题。 我使用从setTimeout调用的函数的AJAX调用。在重新调度函数之前,我需要知道是否能够区分何时存在活动的AJAX调用。 为此,我使用了两个全局变量。因此,代码结构如下所示: setTimeout(some_function, 10000); window.ajax_running = 0; window.calls_so_far = 0; function some_function () { if(win

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

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并将其递增(就像有线程一样)。

我搞砸了什么?如何修复此问题?

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

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()
     //...
 });
 }
var计数器;
计数器=0;
函数recallSomeFunction(){
setTimeout(一些函数,10000);
}
函数some_函数(){
$.ajax({
//各种各样的
成功:函数(数据){
如果(++计数器
您是否在某处初始化了window.calls\u sou\u far?类似window.calls\u sou\u far=0@StefanoOrtisi:是的,它们被设置为0window.ajax\u running=0;一旦ajax完成,我会运行许多ajax调用,您应该使用
关闭console.log函数。您可以用
window.calls\s替换增量行o_far+=1;
我正在增加计数器,以查看有多少ajax调用已完成。当它们全部完成(如果条件满足)时,我将ajax标记为未运行。请参阅更新的OPSo,我添加了一个计数器变量。这应该会起作用。处理无信号量的异步调用的方法总是更安全的(更安全??不是一个会说英语的人);-)但我也使用计数器。从
窗口更改为
var
也不起作用。同样的问题