我还是Javascript的新手。我正在开发一个简单的页面,我单击一个按钮来获取servlet上的值并显示它。它运作良好,除非我在按钮上点击疯狂。有时,显示的结果为空。
我想知道这是否是由同时调用相同的以下函数引起的:
function loadXMLDoc2(retr) {
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
$("#" + retr).button('option', 'label', xmlhttp.responseText);
// document.getElementById(retr).innerHTML=xmlhttp.responseText;
}
}
var param = "cmd=" + encodeURIComponent(retr);
document.getElementById("TOP_LEFT").innerHTML = param;
xmlhttp.open("GET","/WebFront/Asynclet?" + param,true);
xmlhttp.send(null);
}
Javascript线程安全吗?如果没有,我如何同步或隔离对此方法的调用?
答案 0 :(得分:36)
除了HTML5网络工作者(受到严格控制)之外,Javascript是单线程的,因此线程安全没有问题。一个执行线程将在下一个执行之前完成。
像ajax响应这样的事情会通过一个事件队列,只有在任何其他执行线程完成时才会执行。
有关详细信息,请参阅Do I need to be concerned with race conditions with asynchronous Javascript?。
有关ajax响应回调的具体讨论,请参阅How does JavaScript handle AJAX responses in the background?。
答案 1 :(得分:4)
在浏览器的上下文中,JavaScript本质上是单线程的。 (有一些较新的浏览器功能提供了一种线程模型,但线程交互非常有限,无法直接共享数据。)