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