jquery ajax没有数据仅在IE上返回

时间:2012-08-15 11:11:21

标签: jquery ajax internet-explorer

我有一个在Chrome,FF和Safari上运行良好的ajax调用但在IE上总是失败(“成功但没有数据”)。 我检查了服务器日志,并且正确的响应总是触发,但IE仍然显示空响应,并且没有捕获正确的302 http状态代码。 我尝试了很多组合,发现使用contentType时:“text / html; charset = utf-8”IE确实得到了响应,但问题是$ _POST数组是空的,因为发送POST应该是contentType:“application / x -www-form-urlencoded; charset = utf-8“

这是我的javascript:

function someFunc() {   
  $.ajax({
    cache: false,
    async: false,
    type: 'POST',
    dataType: 'html',
            contentType: "application/x-www-form-urlencoded; charset=utf-8",
        //contentType: "text/html; charset=utf-8",
    url: myProtocol + myHost + "/mypage.php",
    data: {action: "someAction"},
    success: function( data ) {
        if (data == ""){
            alert("success but no data");
            return;
        }
        // do something...
        return;
    },
    error: function( data ) {
        if (data.status == "302"){
                            // do something...
            return;
        } else {
            // do something...
            return;
        }
    }
});

  return;
}

这是我的PHP响应(mypage.php):

function someFunc() {   
  $.ajax({
    cache: false,
    async: false,
    type: 'POST',
    dataType: 'html',
            contentType: "application/x-www-form-urlencoded; charset=utf-8",
        //contentType: "text/html; charset=utf-8",
    url: myProtocol + myHost + "/mypage.php",
    data: {action: "someAction"},
    success: function( data ) {
        if (data == ""){
            alert("success but no data");
            return;
        }
        // do something...
        return;
    },
    error: function( data ) {
        if (data.status == "302"){
                            // do something...
            return;
        } else {
            // do something...
            return;
        }
    }
});

  return;
}

仅在IE 7-9上,我最终获得了“成功,但没有数据”在其他浏览器上完美无缺。 任何的想法?有人?

谢谢!

2 个答案:

答案 0 :(得分:0)

你发送位置标题吗?

header(“Location:”,$ loginUrl);

查看14.30位置:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

答案 1 :(得分:0)

问题在于IE正在尝试遵循重定向位置这不是我想在我的JS中做的事情。 我做的解决方法是将响应更改为200 OK并让JS检测URL是否响应,然后对其执行某些操作:

success: function( data ) {
    if (data.match('http://') || data.match('https://')){
        window.parent.location = data;
        return;
    } else {
            var url = (window.location != window.parent.location) ? document.referrer: document.location;
        window.parent.location = url;
        return;
    }
}