jQuery Ajax - 如何获取错误的响应数据

Roy*_*ari 53 javascript jquery

我有一个简单的Web应用程序.我已经创建了服务器REST API,因此它将返回带有HTTP代码的响应和带有更多详细信息的JSON(或XML)对象:应用程序代码(特定于场景,描述发生了什么的消息等).

因此,例如,如果客户端发送注册请求且密码太短,则响应HTTP代码将为400(错误请求),响应数据将为:{appCode : 1020 , message : "Password is too short"}.

在jQuery中,我使用"ajax"函数来创建POST请求.当服务器返回与HTTP代码200(OK)不同的内容时,jQuery将其定义为"错误".

错误处理程序可以获得3个参数:jqXHR,textStatus,errorThrown.我可以在错误的情况下获取服务器发送的JSON对象吗?

编辑:

1)这是我的JS代码:

function register (userName, password) {
    var postData = {};
    postData["userName"] = userName;
    postData["password"] = password;

    $.ajax ({
        dataType: "json",
        type: "POST",
        url: "<server>/rest/register",
        data: postData,
        success: function(data) {
            showResultSucceed(data);
            hideWaitingDone();
        },
        error: function (jqXHR, textStatus, errorThrown) {

            showResultFailed(jqXHR.responseText);
            hideWaitingFail();
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

2)在查看Firebug控制台时,响应似乎是空的.当使用REST测试工具调用相同的请求时,我得到了一个带有JSON对象的响应.

我究竟做错了什么?

mpe*_*pen 46

以下是如何获取有关错误的JSON数据的示例:

$.ajax({
    url: '/path/to/script.php',
    data: {'my':'data'},
    type: 'POST'
}).fail(function($xhr) {
    var data = $xhr.responseJSON;
    console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

来自文档:

如果指定了json,则在作为对象传递给成功处理程序之前,使用jQuery.parseJSON解析响应.解析的JSON对象通过jqXHR对象的responseJSON属性提供.

否则,如果responseJSON没有,您可以尝试$.parseJSON($xhr.responseText).

  • “ $ .parseJSON($ xhr.responseText)”是关键!如果不是使用“ .fail”,则使用错误:function(xmlHTTP,status,httperror){$ .parseJSON(xmlHTTP.responseText); } (2认同)

hvg*_*des 28

直接来自文档

自jQuery 1.5起,$ .ajax()返回的jQuery XMLHttpRequest(jqXHR)对象是浏览器的本机XMLHttpRequest对象的超集.例如,它包含responseText和responseXML属性,以及getResponseHeader()

所以使用jqXRH参数并从中获取responseText属性.

在上面的链接中,查找标题为的部分

jqXHR对象