1

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

    

$loginUrl = "someUrl";
header("HTTP/1.1 302 Found");
header("Content-Type: text/html; charset=utf-8");
Header("Content-Length: " . mb_strlen($loginUrl, "8bit"));
header("Connection: close", true);
echo $loginUrl;

只有在 IE 7-9 上,我才能在其他浏览器上完美运行“成功但没有数据”。任何想法?有人?

谢谢!

4

2 回答 2

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;
    }
}
于 2012-08-24T13:33:20.493 回答
-1

您要返回Location HTTP标题吗?

header("Location", $loginUrl);
于 2012-08-15T11:19:52.640 回答