0

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 でも修正されたという主張を削除します。そうではありません。

4

0 に答える 0