JavaScript XMLHttpRequest()和重定向

JavaScript XMLHttpRequest()和重定向,javascript,html,redirect,Javascript,Html,Redirect,我想向服务器发送一个XMLRequest,然后将用户重定向到目前为止的首页 我有: 如果我只是在没有重定向的情况下运行代码,那么它工作得很好,但是如果我有重定向,那么API GET请求就会失败。有人能解释一下我遗漏了什么吗?请求是异步的,这意味着window.location在执行之前不会等待请求完成。 这将导致导航离开当前页面,浏览器将取消请求 要解决此问题,您必须等待请求完成,然后才能导航离开。您可以通过监听请求的状态更改来实现这一点 var posts=newXMLHttpRequest

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


如果我只是在没有重定向的情况下运行代码,那么它工作得很好,但是如果我有重定向,那么API GET请求就会失败。有人能解释一下我遗漏了什么吗?

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

要解决此问题,您必须等待请求完成,然后才能导航离开。您可以通过监听请求的状态更改来实现这一点

var posts=newXMLHttpRequest();
posts.onreadystatechange=函数(){//侦听状态更改
如果(posts.readyState==4&&posts.status==200){//完成后,我们可以离开
window.location=“index.html”;
}
}
打开(“获取”,api+用户+“/”+密码+“/”+id+“/”+纬度,true);

posts.send()它是异步的。在返回结果之前,浏览器会被重定向。如果您执行XHR是为了在服务器上执行某些操作,您确实应该执行POST而不是GET,以避免出现非常简单的CSRF漏洞。谢谢。我还应该能够更改:posts.open(“GET”,api+user+“/”+password+“/”+id+“/”+latitude,false);你可以,但没有注明。这意味着在请求完成之前,事件循环不会运行任何代码,从而使您的页面没有响应。:)哦,我明白了。Thanks@SeanM如果答案满足您的需要,请将其标记为正确,以便其他人也能看到。:)@洛可可的同步部分确实是不推荐的,但我发布的解决方案没有使用它。
var posts = new XMLHttpRequest();
var api="XXXXXXXXXX";
posts.open("GET", api+user+"/"+password+"/"+id+"/"+latitude, true);
posts.send();

window.location = "index.html"