2015-10-26 70 views
1

我想一個XMLRequest發送到服務器,然後重定向用戶到頭版到目前爲止 我:的JavaScript的XMLHttpRequest()和重定向

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

window.location = "index.html" 

如果我只是沒有在最後它重定向運行代碼效果很好,但如果我有重定向API GET請求失敗。有人能向我解釋我錯過了什麼嗎?

+0

這是異步的。瀏覽器在結果返回之前被重定向。 – Rik

+0

如果你爲了在服務器上發生某些事情而做XHR,你應該做一個POST而不是GET來避免一個非常簡單的CSRF漏洞。 – Pointy

回答

2

請求是異步這意味着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();

+0

謝謝。我也應該能夠改變:posts.open(「GET」,api + user +「/」+ password +「/」+ id +「/」+ latitude,** false **); –

+0

你可以但沒有指出。這意味着事件循環在請求完成之前不會運行任何代碼,從而使頁面無響應。 :) – toskv

+0

哦,我看到了不同。謝謝 –