IE与window.location.href不兼容

djq*_*djq 4 javascript ajax jquery internet-explorer

我正在使用来自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'         

}); 
Run Code Online (Sandbox Code Playgroud)

这在FF/Safari/Chrome上工作正常,但是当我在IE上测试它时它不起作用.有没有更好的方法重定向到新页面?我正在使用,async:false因为我的数据没有在Chrome/Safari上加载,如果我没有使用回调,因为页面只会在POST请求完成之前更改.

jos*_*736 5

这是括号. href不是一个函数,所以试图调用它window.location.href("/step2.php")- 是一个TypeError.

href像下一行一样分配,或者更好,使用location.assign():

location.assign('/step2.php');
Run Code Online (Sandbox Code Playgroud)

虽然您可以直接分配到location属性(location.href='...';)以使浏览器导航,但我建议不要这样做.

在内部,这样做只是调用location.assign(),并且分配给属性并不总是在所有浏览器中表现相同.


至于,async:false,从来没有做到这一点.如果您发出同步XHR请求,那么您做错了. 报告的IE9挂起的8.4%是由于同步XHR阻止了浏览器.

鉴于你在回调中有它,location在POST完成之前不会发生分配,所以我不确定你的意思是"在POST完成之前页面会改变".(你忘记取消表格submit吗?)

  • _Never_是一个强有力的词.对于同步ajax,它有时是必要且有用的.但是,你的观点很好.在需要阻塞的情况下,开发人员应该注意显示某些事情仍在发生,即ajax loader gif. (2认同)
  • @peter:这是一个我对*never*这个词感到满意的情况.关键是如果你使用同步XHR,你*不能*显示加载器gif,因为XHR请求会阻止你的页面呈现.老实说,我认为没有异步XHR无法使用的情况; 并且有太多的缺点来同步XHR以证明在异步上使用它是正确的. (2认同)