readyState = 4行中的三次.Ajax - 由警报引起

Pau*_*ski 1 javascript ajax stack

我有一个奇怪的情况.

尝试双击这个小提琴上的"疯狂" .你会注意到onreadystatechange被称为3次.所有这些时间readyState = 4.对我来说,这是疯了.

但是zinger是当我alert(added)从双击事件监听器函数中移除如此小提琴所示,那么一切都还可以.

是否有人可以向我解释发生了什么?这对我来说很奇怪.谢谢你.:)

Ell*_* B. 5

因为你的XMLHttpRequest设置为异步执行这是发生alert('added')暂停JavaScript执行线程的XMLHttpRequest开始前调用onreadystatechange.当您关闭警报时,XMLHttpRequest已经完成,并且四个调用onreadystatechange都在堆栈中,等待执行.

因此,因为您的XMLHttpRequest已经完成,.readyState并且.status已经分别等于4200.因此,每次.onreadystatechange调用时,您的if语句都会评估为真.

如果您将XMLHttpRequest更改为同步执行(或者如果您alert('added')在调用AJAX之前放置),那么您将获得预期的警报数:

http://jsfiddle.net/B9a5G/6/

有关JavaScript事件,计时和单线程处理的更多信息:

http://javascript.info/tutorial/events-and-timing-depth