1

私のページでは、jquery を使用して ajax 呼び出しを行います。

$.ajax(
{
    type: "POST",
    url: "MyPage.aspx/myMethod",
    data: parameters,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg)
    {
      alert("Success");
    },
    error: function(e, textStatus, errorThrown)
    {
       alert("Error");
    },
    complete: function(s, e)
    {
        alert("it is done");
    }

}

Ajax 呼び出しが送信されている (まだ返されていない) 間にユーザーがページを更新した場合 (またはポストバックが発生した場合) を除き、すべて正常に動作します。それは自動的に "error:" メソッドに入ります。

それを回避する方法はありますか?ユーザーが ajax 呼び出し中にページを更新しただけの場合、ユーザーに「エラー」メッセージを表示したくありません。

ありがとう

4

1 に答える 1

2

問題を再現しましたが、Chrome でのみです。Internet Explorer 10 では問題なく動作します。

キャッシュされたリクエストの問題だと思いcache: false、jQueryの.ajax()設定で設定を試みましたが、役に立ちませんでした。

返された特定のエラーの処理は機能しているようですが、非常に洗練された解決策ではありません。

$.ajax({
    type: "POST",
    url: "MyPage.aspx/myMethod",
    data: parameters,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg){
        alert("Success");
    },
    error: function(e, textStatus, errorThrown){
        if (e.status === 0) {
            alert("Error status 0.");
        } 
        else {
            alert("Error");
        }
    },
    complete: function(s, e){
        alert("it is done");
    }
}

注: ほとんどの場合、エラー ステータス 0 は無視したいので、 を削除しalert("Error status 0.");ますが、デバッグの目的で残しました。

アップデート:

次のような他のステータス コードをトラップできます。

else if (jqXHR.status == 404) {
    alert("Requested page not found. [HTTP 404]");
} 
else if (jqXHR.status == 500) {
    alert("Internal Server Error [HTTP 500].");
}
else if (exception === 'parsererror') {
    alert("Requested JSON parse failed.");
} 
else if (exception === 'timeout') {
    alert("Time out error.");
} 
else if (exception === 'abort') {
    alert("AJAX request aborted.');
}
于 2013-10-16T20:06:24.120 に答える