XMLHttpRequest有时无法正常工作

时间:2020-08-27 14:55:07

标签: javascript xmlhttprequest

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

$("#Button11").on("click", function() {
  var xhr = new XMLHttpRequest();
  xhr.open("POST", "/addtolist", true);
  xhr.setRequestHeader(
    "Content-type",
    "application/x-www-form-urlencoded",
    "Access-Control-Allow-Origin",
    "*"
  );
  var parameter = "dc=deal1";
  xhr.send(parameter);
  window.location.href = "/final_page.ejs";
});

2 个答案:

答案 0 :(得分:2)

问题

XMLHttpRequest.send()是一种异步方法,这意味着该方法仅要求发送请求,但不会立即完成。在大多数情况下,这无关紧要,但是在您的脚本中,您紧随其后重定向用户,因此,有时,在发送请求之前,已对用户进行了重定向。

解决方案

在重定向用户之前,您必须等待请求完成,值得庆幸的是,XMLHttpRequest拥有实现该请求的方法。这是XMLHttpRequest.onload()方法。因此,您可以将脚本更新为:

$("#Button11").on("click", function() {
  var xhr = new XMLHttpRequest();
  xhr.open("POST", "/addtolist", true);
  xhr.setRequestHeader(
    "Content-type",
    "application/x-www-form-urlencoded",
    "Access-Control-Allow-Origin",
    "*"
  );
  var parameter = "dc=deal1";
  xhr.send(parameter);
  xhr.onload = function(){
    window.location.href = "/final_page.ejs";
  };
});

如评论中所述,JQuery还具有用于提出请求的集成解决方案,我建议您阅读documentation以获得更好的解决方案。

答案 1 :(得分:-1)

您的位置更改正在杀死您的Ajax,

为什么现在不拥有更简单的$ .post呢?

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

void test::reset() {
    // Create a default constructed instance of `test`
    //   and assign it to `*this`
    *this = {};
};