【问题标题】:JavaScript XMLHttpRequest() and RedirectJavaScript XMLHttpRequest() 和重定向
【发布时间】:2015-10-26 20:22:17
【问题描述】:

到目前为止,我想向服务器发送一个 XMLRequest,然后将用户重定向到首页 我有:

var posts = new XMLHttpRequest();
var api="XXXXXXXXXX";
posts.open("GET", api+user+"/"+password+"/"+id+"/"+latitude, true);
posts.send();

window.location = "index.html"

如果我只在最后运行没有重定向的代码,它工作得很好,但如果我有重定向,API GET 请求会失败。有人可以向我解释我缺少什么吗?

【问题讨论】:

  • 它是异步的。浏览器在返回结果之前被重定向。
  • 如果你在做 XHR 是为了让服务器发生一些事情,你真的应该做一个 POST 而不是 GET 以避免一个非常简单的 CSRF 漏洞。

标签: javascript html redirect


【解决方案1】:

请求是异步的,这意味着 window.location 在执行之前不会等待请求完成。 这会导致导航离开当前页面并且浏览器取消请求。

要解决此问题,您必须等待请求完成才能离开。您可以通过监听请求的状态变化来做到这一点。

var posts = new XMLHttpRequest();
posts.onreadystatechange = function() { // listen for state changes
  if (posts.readyState == 4 && posts.status == 200) { // when completed we can move away
    window.location = "index.html";
  }
}
posts.open("GET", api+user+"/"+password+"/"+id+"/"+latitude, true);
posts.send();

【讨论】:

  • 谢谢。我也应该能够改变:posts.open("GET", api+user+"/"+password+"/"+id+"/"+latitude, false);
  • 可以,但没有说明。这意味着事件循环在请求完成之前不会运行任何代码,从而使您的页面无响应。 :)
  • 哦,我明白了。谢谢
  • @SeanM 如果答案满足您的需求,请将其标记为正确,以便其他人也能看到。 :)
  • @rococo 同步部分确实已被弃用,但我发布的解决方案并没有使用它。
猜你喜欢
  • 2018-09-11
  • 2011-03-16
  • 2011-05-26
  • 2010-09-18
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多