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'
});