【问题标题】:IE incompatability with window.location.hrefIE 与 window.location.href 不兼容
【发布时间】:2012-04-29 10:00:34
【问题描述】:

我正在使用来自 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 请求完成之前更改。

【问题讨论】:

    标签: javascript jquery ajax internet-explorer


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      window.location.href = "/step2.php" 就好了。

      【讨论】:

      • hmmm,除了 IE 什么都可以!你有什么想法为什么它不能在这个浏览器上运行?
      【解决方案3】:

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

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

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

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

      在内部,这样做只是调用location.assign(),然后分配给属性does not always behave the same in all browsers


      关于,async:false永远不要这样做。如果您发出同步 XHR 请求,you're doing it wrong8.4% 报告的 IE9 挂起是由于同步 XHR 阻塞了浏览器。

      鉴于您在回调中有它,在 POST 完成之前不会分配给 location,所以我不确定您所说的“页面会在 POST 完成之前更改”是什么意思。 (您忘记取消表单的submit了吗?)

      【讨论】:

      • 奇怪。 location.assign("/step2.php"); 也不能在 IE 上运行,但可以在 FF/Safari/Chrome 上运行。我最初尝试将它用作函数是基于我阅读的文档(@Hexxagonal 也提到过)。
      • 我同意你关于 async 的观点 - 我已经删除了它。感谢您的建议。
      • 从不是一个强词。它有时对于同步 ajax 是必要且有用的。但是,你的观点很好。在需要阻塞的情况下,开发人员应注意明显地表明某些事情仍在发生,即 ajax 加载程序 gif。
      • @peter:这是我对never这个词感到满意的情况。关键是,如果您使用同步 XHR,您无法显示加载程序 gif,因为 XHR 请求会阻止您的页面呈现。老实说,我认为没有不能使用异步 XHR 的情况;同步 XHR 有太多缺点,无法证明在异步上使用它是合理的。
      • 我将它与 window.location.href 混合使用...认为它是 ie 的后备方案,它使我的问题消失了。它现在正确重定向,而不是通过其他脚本摸索
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 2011-11-16
      • 2021-06-18
      • 2016-03-31
      相关资源
      最近更新 更多