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
警报?再来一次。。。任何依赖于响应的代码都需要放在回调中。这就是为什么要回电话。如果请求是同步的,那么回调就毫无意义了。