jQuery 1.10.1 で$.ajax
、ページのアンロードが発生したときにリクエストが進行中の場合 (たとえば、ユーザーがリンクをクリックしたり、ページをリロードしたりしたため)、error:
コールバックが呼び出されることを見てきました。
jQuery 2.0.0 または 2.0.2 ではそうではないようです。そして、それは素晴らしいです。
ここSOには少なくとも7つの質問がありerror:
、ナビゲート時に呼び出されることについて尋ねます。たとえば、ユーザーが更新をクリックしたときに ajax エラーを処理する
このjsfiddleを参照してください。最初は 1.10.1で実行されていますが、左側のコントロールで 2.0.2 に変更できます。基本的に:
$.ajax({
type: "POST",
url: "/echo/json/",
data: {
json: JSON.stringify({
a: 23
}),
delay: 30
},
cache: false,
success: function (json) {
$('#result').text(JSON.stringify(json));
},
error: function () {
alert("error callback called");
}
});
1.10.1 ではアラートが表示されますが、2.0.2 では表示されないことに注意してください。
ただし、「jQuery 2.0 がリリースされました」というアナウンスには、その旨は何も表示されません。
これが修正/変更されていることに頼ることができますか、それともブラウザに依存する可能性のある事故ですか? 少なくとも Chromium とモバイル Safari (iPad) では修正されているようです。
修正のソースを探しているので、1.x でエラー ハンドラーの呼び出しを停止するか、少なくともエラー コールバックでこれがユーザー アクション/ナビゲーションによるものかどうかを検出できるかどうかを確認できます。特に、これまで見てきた最善の解決策は、コールバックbeforeunload
時にページのアンロードを検出するために使用することです。error:
問題は、それbeforeunload
がモバイル サファリでは機能しないことです。
FWIW: Ubuntu Linux 12.04 でテストしています。
編集済み: Firefox でも修正されたという主張を削除します。そうではありません。