IE несовместимость с window.location.href

Я использую обратный вызов из запроса на отправку AJAX для перехода на новую страницу, но он не работает в Internet Explorer. Мой код выглядит следующим образом:

$.ajax({ 
    type: "POST",
    url: phpUrl,  
    data: data,  
    async: false, 
    success: function() {       
         if (navigator.appName == 'Microsoft Internet Explorer'){   window.location.href("/step2.php")}
         else{ window.location.href = "/step2.php"}             
    },  
    dataType:'json'         

}); 

Это отлично работает в FF/Safari/Chrome, но когда я тестирую его на IE, он не работает. Есть ли лучший способ перенаправления на новую страницу? Я использую async:false, поскольку мои данные не загружались в Chrome/Safari, если я не использовал обратный вызов, поскольку страница просто изменилась до завершения запроса POST.

Ответ 1

Это скобки. href не является функцией, поэтому попытка вызвать его window.location.href("/step2.php")TypeError.

Назначьте href, как вы делаете на следующей строке, или лучше, используйте location.assign():

location.assign('/step2.php');

Пока вы можете напрямую назначать свойства location (location.href='...';), чтобы заставить браузер перемещаться, я рекомендую против этого.

Внутри это просто вызывает location.assign() в любом случае, а присвоение свойства не всегда ведет себя одинаково во всех браузерах.


Относительно async:false, никогда не делайте этого. Если вы сделаете синхронный запрос XHR, , вы делаете это неправильно. 8,4% сообщенных IE9 зависает из-за синхронного XHR, блокирующего браузер.

Учитывая, что у вас есть это в обратном вызове, назначение location произойдет не до тех пор, пока POST не завершится, поэтому я не уверен, что вы подразумеваете под "страница будет меняться до завершения POST". (Забыли ли вы отменить форму submit?)

Ответ 2

window.location.href = "/step2.php" просто отлично.

Ответ 3

IE только как полный URL.

var fullURL = 'http://www.your_site.com/step2.php';

$.ajax({ 
    type: "POST",
    url: phpUrl,  
    data: data,  
    async: false, 
    success: function() {

        window.location.href(fullURL);

    },  
    dataType:'json'         
});