ユーザー名/パスワードを入力してログインボタンをクリックするサイトがあります。ログイン ボタンは XMLHttpRequest オブジェクトを作成し、それを起動します。
Chrome、Firefox、Opera、Safari、Android デバイス、iOS デバイスでは問題なく動作します。HTTP アドレスを使用し、HTTPS を使用していない限り、IE9 は問題なく動作します。
HTTPS では、IE9 は次のように動作します。
最初のログイン リクエストでは、何も返されません。F12 画面のネットワーク タブにログイン リクエストが表示され、すべて正しく表示されます。スクリプト タブでエラーが発生することはありません。単に何も起こりません。
ここにクレイジーな部分があります: - ログインを 2 回クリックすると、実際に機能します。- ブラウザで [更新] をクリックしてからログインすると、同様に機能します。
私は次のように要求を行っています。
var x = new XMLHttpRequest();
x.open("POST", "/Relative/URL/Path", true);
x.setRequestHeader("Content-Type", "text/plain");
x.onreadystatechange = function () {
if ((x.readyState == 4) && (x.status == 200)) {
// handle callback
}
}
x.send(my request);
これが失敗すると、デバッガーは x.send() 行から onreadystatechange コードに移動します。readyState は 1 になります。他に何も起こらないため、デバッグできるのはこれが最後になります。
どんなアイデアでも大歓迎です。
[編集]: 何が起こるかを確認するために、1 つの要求を行かせました。onreadystatechange イベントは、readyState = 4 および status = 12152 で再び発生しました。IE9 の F12 画面のネットワーク ビューには、結果が Aborted として表示され、所要時間が 1589.07 秒として表示されます。Google で検索すると、これはサーバーで接続が閉じられたことを意味します。
[編集 2]: 以下のコメントに基づいて、jQuery の ajax() メソッドを使用するようにこのコードを修正しました。これにより、私の側の悪いコードを排除できる可能性があると思いました。そのような幸運はありません。同じ現象が発生します。
$.ajax({
"url": sUrl,
"success": function (data, textStatus, x) {
workerCallback(data, id, "");
},
"error": function (x, testStatus, errorThrown) {
workerCallback("nc", id, errorThrown);
},
"contentType": "text/plain",
"data": JSON.stringify(req),
"dataType": "json",
"timeout": 1600000,
"type": "POST"
});
[最終更新:] コードを更新しました。タイムアウトが発生した場合は、同じリクエストを 1 回だけ再送信するだけです。かなりのハックですが、機能します。誰かが解決策を見つけない限り、私は賞金を以下の人々が持っていたいくつかの役立つアイデアに分けます.