1

Chrome、FF、および Safari では正常に動作する ajax 呼び出しがありますが、IE では常に失敗します (「成功したがデータがありません」)。サーバー ログを確認したところ、正しい応答が常にトリガーされますが、それでも IE は空の応答を示し、正しい 302 http ステータス コードをキャッチしません。私は多くの組み合わせを試してみましたが、 contentType: "text/html; charset=utf-8" を使用すると IE は応答を取得しますが、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) です。

    

$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 に変更し、URL が応答しているかどうかを JS に検出させてから、何かを行うことでした。

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 に答える