2015-10-26 3 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 + "/" + широта, ** false **); –

+0

Вы можете, но не указано. Это означает, что цикл события не будет запускать какой-либо код до тех пор, пока запрос не завершится, что сделает вашу страницу неактивной. :) – toskv

+0

О, я вижу разницу. Спасибо –

Смежные вопросы