Javascript 在外部声明的变量和在XMLHttpRequest中修改的变量值在此Ajax请求外部不可见

Javascript 在外部声明的变量和在XMLHttpRequest中修改的变量值在此Ajax请求外部不可见,javascript,ajax,Javascript,Ajax,在外部声明的变量: var total=0; on success of AJAX{ total++; alert(total);// gives value } alert(total)// gives zero value 这里我得到的总值是0。您的ajax请求可能是异步的。这意味着您的警报发生在响应返回之前 任何依赖于响应的代码(如警报)都需要放在onreadystatechange处理程序中。不清楚实际问题是什么,但听起来像是典型的异步混淆。默认情况下,XMLHttpReques

在外部声明的变量:

var total=0;

on success of AJAX{

total++;
alert(total);// gives value
}

alert(total)// gives zero value

这里我得到的总值是0。

您的
ajax
请求可能是异步的。这意味着您的
警报发生在响应返回之前


任何依赖于响应的代码(如警报)都需要放在
onreadystatechange
处理程序中。

不清楚实际问题是什么,但听起来像是典型的异步混淆。默认情况下,
XMLHttpRequest
运行async,当遇到事件(如readyState 4)时,它的回调将触发

因此,您的
alert()
语句很可能是在任何ajax处理程序启动之前遇到的

因此,简单的解决方案是,将
alert()
分别移动到
.onreadystatechange
事件处理程序中
.onload
事件处理程序中,移动到处理
成功
部分的最底部


最糟糕的解决方案(即使没有人推荐)是将
XMLHttpRequest
设置为同步。这意味着,在请求运行时,浏览器及其UI线程将被锁定,直到请求完成。

在ajax调用后,我将在文档中设置total的这个值。@Judy如果调用成功,这不会有什么区别asynchronous@Judy:对,ajax调用是异步的。在不同步的情况下。正如在中一样,它的发生是无序的。换句话说,在响应返回之前,请求不会阻止后续代码的执行。@Judy在处理函数调用时,编写代码的顺序与执行顺序无关。AJAX请求被发出,警报发生,AJAX调用回调函数。@Judy:是的,我知道。同样,请求是异步的。在请求之后编写的任何代码都将在响应完成之前执行。您是否注意到在发出
1
警报之前,您收到了
0
警报?再来一次。。。任何依赖于响应的代码都需要放在回调中。这就是为什么要回电话。如果请求是同步的,那么回调就毫无意义了。