jQuery ajaxエラー関数


130

ページにデータを渡すajax呼び出しがあり、ページに値が返されます。

ページから成功した呼び出しを取得しましたが、aspでエラーが発生するようにコード化しました。jqueryからそのエラーを取得するにはどうすればよいですか?

例えば:

cache: false,
url: "addInterview_Code.asp",
type: "POST",
datatype: "text",
data: strData,
success: function (html) {
    alert('successful : ' + html);
    $("#result").html("Successful");
},
error: function (error) {
    **alert('error; ' + eval(error));**
}

それは私が理解できないエラービットです。私はその後、私はというエラーメッセージが使用できるようにすることを、私は配置する必要が何をすべきかのパラメータの関数で上げサーバ内に。


そこにタイプミスがあります:それdataTypeはありませんdatatype
Alejandro Nava 2016


7
@ alej27:言い回しはちょっと変わっていますが、両方を使用できないとは言いません。リクエストは成功とエラーを呼び出さないことを示します(相互に排他的であるため)。
Marty Vance

ここで回答に注意してくださいjQuery 3.0以降、廃止予定の注記が.errorあり、.success削除されたためより重要になります。
Mark Schultheiss

回答:


221

Ajax error関数で必要なパラメーターはjqXHR, exception次のとおりで、次のように使用できます。

$.ajax({
    url: 'some_unknown_page.html',
    success: function (response) {
        $('#post').html(response.responseText);
    },
    error: function (jqXHR, exception) {
        var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.\n Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.\n' + jqXHR.responseText;
        }
        $('#post').html(msg);
    },
});

デモフィドル


パラメーター

jqXHR:

実際には次のようなエラーオブジェクトです

AjaxエラーjqXHRオブジェクト

次のような関数console.log内で使用することにより、独自のブラウザコンソールでこれを表示することもできますerror

error: function (jqXHR, exception) {
    console.log(jqXHR);
    // Your error handling logic here..
}

statusこのオブジェクトのプロパティを使用してエラーコードを取得しています。たとえば、status = 404を取得した場合、要求されたページが見つからなかったことを意味します。全く存在しません。そのステータスコードに基づいて、ユーザーをログインページまたはビジネスロジックに必要なものにリダイレクトできます。

例外:

例外の種類を示す文字列変数です。したがって、404エラーが発生した場合、exceptionテキストは単に「エラー」になります。同様に、他の例外テキストとして「タイムアウト」、「中止」が表示される場合があります。


廃止のお知らせ:jqXHR.success()jqXHR.error()、およびjqXHR.complete()コールバックがjQueryの1.8で廃止されています。最終的な削除のためにコードを準備するjqXHR.done()jqXHR.fail()は、jqXHR.always()代わりに、、およびを使用します。

したがって、jQuery 1.8以降を使用している場合は、次のように成功およびエラー関数のロジックを更新する必要があります。

// Assign handlers immediately after making the request,
// and remember the jqXHR object for this request
var jqxhr = $.ajax("some_unknown_page.html")
    .done(function (response) {
        // success logic here
        $('#post').html(response.responseText);
    })
    .fail(function (jqXHR, exception) {
        // Our error logic here
        var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.\n Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.\n' + jqXHR.responseText;
        }
        $('#post').html(msg);
    })
    .always(function () {
        alert("complete");
    });

それが役に立てば幸い!


6
興味深いことに、ajaxSetupの使用は推奨されていません。api.jquery.com/jquery.ajaxsetup
SleepyBoBos

1
@palaѕн廃止のお知らせを誤って読んだと思います。お気づきの場合、非推奨通知はjqXHRのメソッドの非推奨について話しているが、上記の例での成功、エラー、完了の使用は、$。ajaxメソッドのオブジェクト内で行われます。これは非推奨ではなく、コードを切り替える必要はありません。ただし、メソッドをチェーンしたい場合は、このスタイルを使用できます。「deprecation ...」を読んだとき、これは私を(理由もなく)やめました。:-)
bchr02 2017年

jQuery 3.0の時点で、廃止予定が記載され.error.success削除されたためにより重要になった
Mark Schultheiss

99

これを試して:

error: function(jqXHR, textStatus, errorThrown) {
  console.log(textStatus, errorThrown);
}

検証エラーについてフロントエンドに通知したい場合は、jsonを返してみてください:

dataType: 'json',
success: function(data, textStatus, jqXHR) {
   console.log(data.error);
}

あなたのASPスクリプトは戻るはずです:

{"error": true}

1
textSttausとerrorThrownの目的は何ですか?説明してください
アンナプルナ2018

4

aspエラーを取り除く方法は次のとおりです。

              cache: false,
              url: "addInterview_Code.asp",
              type: "POST",
              datatype: "text",
              data: strData,
              success: function (html) {
                  alert('successful : ' + html);
                  $("#result").html("Successful");
              },
              error: function (jqXHR, textStatus, errorThrown) {
                  if (jqXHR.status == 500) {
                      alert('Internal error: ' + jqXHR.responseText);
                  } else {
                      alert('Unexpected error.');
                  }
              }

2
error(jqXHR, textStatus, errorThrown)

http://api.jquery.com/jQuery.ajax/


9
単なるコードやリンクのドキュメントではなく、説明を提供してください。
Greg Dubicki

12
ほとんど何もありがとうございました。
judasane

たとえば、「OPは関数error(error)を使用していますが、jqueryは関数error(jqXHR、textStatus、errorThrown)を呼び出しています。OPのスニペットに2つの欠落しているパラメーターがあることに注意してください。」
2017年

2
          cache: false,
          url: "addInterview_Code.asp",
          type: "POST",
          datatype: "text",
          data: strData,
          success: function (html) {
              alert('successful : ' + html);
              $("#result").html("Successful");
          },
          error: function(data, errorThrown)
          {
              alert('request failed :'+errorThrown);
          }

2

あなたは関数を使用しています

error(error) 

しかし、jqueryは実際には3つのパラメーターを持つ関数を探しています。

error(jqXHR, textStatus, errorThrown)

さらに2つのパラメーターを追加する必要があります。

また、「非推奨」について言及している上記のすべてのコメントをご覧ください:)

$.ajax("www.stackoverflow.com/api/whatever", {
    dataType:"JSON"
    data: { id=1, name='example' }
}).succes(function (result) {
    // use result
}).error(function (jqXHR, textStatus, errorThrown) {
    // handle error
});

4
さらに2つのパラメーターを追加する必要があります -これは間違っています。
開発者

1
うーん。それがあなたが言わなければならないすべての場合-多分何も言わないのですか?または、あなたは自分の発言を説明して実際に助けることができます。あなたの選択。
2017年

1
JavaScriptで、メソッドがあるとしましょう- function myMethod (err) { alert(err); }そしてそれを次のように呼び出しますmyMethod ("something is wrong", 500, some_object)-これは問題なく動作します。あなたのステートメントによると、これはメソッドのシグネチャがの場合にのみ機能しfunction myMethod (err, status, some_object)ます。上記の例は忘れてください。success答えにあるイベントのシグネチャは実際.success(data, status, xhr)にはですが、結果が必要なだけの場合は、通常のようにバインドして.success (data)両方を機能させます。
開発者

そして、この答えを追加することで、どのような付加価値をもたらしましたか?IMO以前の回答で欠落していた情報が回答にありません。あなたがしたことは、この質問を再びスタックに引き上げることだけでした。
開発者

0

jquery.comから:

The jqXHR.success(), jqXHR.error(), and jqXHR.complete()
callback methods introduced injQuery 1.5 are deprecated
as of jQuery 1.8. To prepare your code for their eventual 
removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.

グローバルハンドラーが必要な場合は、以下を使用できます。

.ajaxStart(), .ajaxStop(),
.ajaxComplete(), .ajaxError(),
.ajaxSuccess(), .ajaxSend()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.