Javascript XMLHttpRequest有时不工作

Javascript XMLHttpRequest有时不工作,javascript,xmlhttprequest,Javascript,Xmlhttprequest,我已经创建了一个ClickListener,它应该向我的服务器发出POST请求。大多数情况下,POST请求是发出的,但有时,无论我尝试多少次,它都无法发出POST请求。有人能帮我理解问题是什么以及如何解决吗?这是我正在处理的代码: $(“#按钮11”)。在(“单击”,函数(){ var xhr=new XMLHttpRequest(); xhr.open(“POST”,“/addtolist”,true); xhr.setRequestHeader( “内容类型”, “application/x

我已经创建了一个
ClickListener
,它应该向我的服务器发出
POST
请求。大多数情况下,POST请求是发出的,但有时,无论我尝试多少次,它都无法发出
POST
请求。有人能帮我理解问题是什么以及如何解决吗?这是我正在处理的代码:

$(“#按钮11”)。在(“单击”,函数(){
var xhr=new XMLHttpRequest();
xhr.open(“POST”,“/addtolist”,true);
xhr.setRequestHeader(
“内容类型”,
“application/x-www-form-urlencoded”,
“访问控制允许来源”,
"*"
);
var parameter=“dc=deal1”;
发送(参数);
window.location.href=“/final_page.ejs”;
});
问题
XMLHttpRequest.send()
是一种异步方法,这意味着该方法只要求发送请求,但不会立即执行。大多数情况下,这并不重要,但在脚本中,您会在发送请求之后立即重定向用户,因此,有时,在发送请求之前会重定向用户

解决方案 在重定向用户之前,您必须等待请求完成,谢天谢地,
XMLHttpRequest
有一个方法来实现它。这是
XMLHttpRequest.onload()方法。因此,您可以将脚本更新为:

$(“#按钮11”)。在(“单击”,函数(){
var xhr=new XMLHttpRequest();
xhr.open(“POST”,“/addtolist”,true);
xhr.setRequestHeader(
“内容类型”,
“application/x-www-form-urlencoded”,
“访问控制允许来源”,
"*"
);
var parameter=“dc=deal1”;
发送(参数);
xhr.onload=函数(){
window.location.href=“/final_page.ejs”;
};
});

正如在评论中提到的,JQuery也有一个用于发出请求的集成解决方案,我建议您阅读它以获得更好的解决方案。

您的位置更改正在结束Ajax

还有,为什么不使用更简单的$.post呢

不需要任何标题,甚至不允许您设置auth标题

$(“#按钮11”)。在(“单击”,函数(){
$.post(“/addtolist”,{“dc”:“deal1”},function(){
window.location.href=“/final_page.ejs”;
})  
});

浏览器可能会缓存呼叫。添加不同的参数以防止。如何防止?添加不同的参数。这不是一个好主意:
xhr.send(参数);window.location.href=“/final_page.ejs”由于您的位置更改可能会杀死xmlhttp请求,因此您有一个竞争条件。发送vs window.location两个动作同时触发,正如我已经评论过的。而且,当您拥有XML时,根本不需要xmlhttprequestjQuery@mplungjan当您使用核心JavaScript时,不需要使用jQuery。Lol当jQuery已经加载时,不需要没有jQuery。我肯定会读取它。谢谢你的回答!我试试看,然后告诉你。非常感谢你!