Javascript:XMLHttpRequest任务开关

Javascript:XMLHttpRequest任务开关,javascript,xmlhttprequest,Javascript,Xmlhttprequest,运行此javascript时,contactButton从未设置为“发送…”。它挂起一秒钟,然后更改为“已发送:)” 我不确定javascript的处理顺序,但它似乎需要某种任务切换来处理XMLHttpRequest() 这显然是一段简短的代码,但在xmlhttp之前,我还有其他一些javascript/css工作要做。当请求被发送时,xmlhttp似乎刚刚接管 有什么想法吗?您将false传递给open,因此它是同步运行的。这意味着它不使用readyState,而是延迟直到请求完成。如果要进行

运行此javascript时,
contactButton
从未设置为“发送…”。它挂起一秒钟,然后更改为“已发送:)”

我不确定javascript的处理顺序,但它似乎需要某种任务切换来处理
XMLHttpRequest()

这显然是一段简短的代码,但在
xmlhttp
之前,我还有其他一些javascript/css工作要做。当请求被发送时,
xmlhttp
似乎刚刚接管


有什么想法吗?

您将false传递给open,因此它是同步运行的。这意味着它不使用readyState,而是延迟直到请求完成。如果要进行同步,则应为:

document.getElementById('contactButton').value = "Sending";
xmlhttp.onreadystatechange=stateChanged;

xmlhttp.open("GET",url,false);
xmlhttp.send(null);
function stateChanged(){
    if (xmlhttp.readyState==4) {
    var response = xmlhttp.responseText;
    if(response == "true"){
        document.getElementById('contactButton').value = "Sent :)";
    }
}
您应该更改为async以避免挂起脚本,并且您可能会发现使用JavaScript库更容易

xmlhttp.open("GET",url,false); 
xmlhttp.send(null); 
if(xmlhttp.status == 200)
{
  var response = xmlhttp.responseText;
  document.getElementById('contactButton').value = "Sent :)";
}