jQuery ajax错误函数

时间:2011-07-22 16:13:22

标签: jquery ajax

我有一个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));**
}

这是我不理解的错误位。在函数中我需要放置什么参数,以便我可以使用服务器中引发的错误消息。

8 个答案:

答案 0 :(得分:182)

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);
    },
});

<强> DEMO FIDDLE


参数

<强> jqXHR:

它实际上是一个看起来像这样的错误对象

Ajax error jqXHR object

您也可以在自己的浏览器控制台中使用console.log函数中的error进行查看:

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

我们使用此对象的status属性来获取错误代码,就像我们获得status = 404一样,这意味着找不到请求的页面。它根本不存在。根据该状态代码,我们可以将用户重定向到登录页面或我们的业务逻辑所需的任何内容。

<强>异常:

这是显示异常类型的字符串变量。因此,如果我们收到404错误,exception文字将只是“错误”。同样,我们可能会将'超时','中止'作为其他异常文本。


  

弃用通知:自jQuery 1.8起,不推荐使用jqXHR.success()jqXHR.error()jqXHR.complete()回调。准备   您最终删除的代码,使用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");
    });

希望它有所帮助!

答案 1 :(得分:86)

试试这个:

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

如果您想通知您的前端有关验证错误,请尝试返回json:

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

你的asp脚本应该返回:

{"error": true}

答案 2 :(得分: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.');
                  }
              }

答案 3 :(得分:2)

error(jqXHR, textStatus, errorThrown)

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

答案 4 :(得分: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);
          }

答案 5 :(得分:2)

您正在使用功能

error(error) 

但是jquery实际上正在寻找一个带有三个参数的函数:

error(jqXHR, textStatus, errorThrown)

您需要再添加两个参数。

另请注意:请查看上面提到的所有评论&#39;弃用&#39; :)

$.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
});

答案 6 :(得分: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()

答案 7 :(得分:0)

您可以使用以下内容:
注释: responseText返回服务器responsestatusText返回预定义的
错误消息status。例如:
responseText在类似Yii2的某些框架中返回类似"Not Found (#404)"的内容,但
statusText返回"Not Found"

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