4

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

4

3 回答 3

5

是括号。 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 阻塞浏览器。

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

于 2012-04-18T02:11:13.683 回答
0

window.location.href = "/step2.php"很好。

于 2012-04-18T02:05:17.607 回答
0

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'         
}); 
于 2013-11-20T10:47:07.587 回答