Javascript jqueryajax-如何获取错误响应数据

Javascript jqueryajax-如何获取错误响应数据,javascript,jquery,Javascript,Jquery,我有一个简单的web应用程序。 我已经创建了ServerRESTAPI,因此它将返回一个带有HTTP代码的响应和一个JSON(或XML)对象,其中包含更多细节:应用程序代码(特定于场景、描述发生了什么的消息等) 因此,例如,如果客户端发送一个注册请求,并且密码太短,那么响应HTTP代码将是400(错误请求),响应数据将是:{appCode:1020,message:“password is too short”} 在jQuery中,我使用“ajax”函数创建POST请求。当服务器返回与HTTP代

我有一个简单的web应用程序。 我已经创建了ServerRESTAPI,因此它将返回一个带有HTTP代码的响应和一个JSON(或XML)对象,其中包含更多细节:应用程序代码(特定于场景、描述发生了什么的消息等)

因此,例如,如果客户端发送一个注册请求,并且密码太短,那么响应HTTP代码将是400(错误请求),响应数据将是:
{appCode:1020,message:“password is too short”}

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

错误处理程序可以获得3个参数:jqXHR、textStatus、errorshown。 在错误情况下,我如何获取服务器发送的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();
        }
    })
}
功能寄存器(用户名、密码){
var postData={};
postData[“用户名”]=用户名;
postData[“密码”]=密码;
$.ajax({
数据类型:“json”,
类型:“POST”,
url:“/rest/register”,
数据:postData,
成功:功能(数据){
ShowResultsAcceed(数据);
hideWaitingDone();
},
错误:函数(jqXHR、textStatus、errorshown){
showResultFailed(jqXHR.responseText);
隐藏失败();
}
})
}
2) 当查看Firebug控制台时,似乎响应是空的。 当使用REST测试工具调用相同的请求时,我会得到一个带有JSON对象的响应

我做错了什么?

截至的$.ajax()返回的jQuery XMLHttpRequest(jqXHR)对象 jQuery1.5是浏览器原生XMLHttpRequest的超集 对象例如,它包含responseText和responseXML 属性以及一个getResponseHeader()

因此,使用jqXRH参数并从中获取
responseText
属性

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


jqXHR对象

在这个问题上花了这么多时间之后,我发现了问题所在

该页面位于URL下:www.mydomain.com/register
RESTAPI位于URL下:server.mydomain.com/REST

这类帖子似乎不是那么简单。
我将搜索更多信息以更好地理解这个问题(如果您有更多信息,请与我共享)


将REST API放在www.mydomain.com/REST下时,一切正常。

下面是一个关于如何获取错误JSON数据的示例:

$.ajax({
    url: '/path/to/script.php',
    data: {'my':'data'},
    type: 'POST'
}).fail(function($xhr) {
    var data = $xhr.responseJSON;
    console.log(data);
});
发件人:

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


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

在使用多部分/表单数据时,我也遇到了同样的问题。起初我认为多部分/表单数据造成了这种混乱,但后来我找到了正确的解决方案

1) 之前的JS代码:

var jersey_url = "http://localhost:8098/final/rest/addItem/upload";
var ans = $.ajax({
    type: 'POST',
    enctype: 'multipart/form-data',
    url: jersey_url,
    data: formData,
    dataType: "json",
    processData: false,
    contentType: false 
    success : funtion(data){
      var temp = JSON.parse(data);
      console.log("SUCCESS : ", temp.message);  
    }
    error : funtion($xhr,textStatus,errorThrown){
       console.log("ERROR : ", errorThrown);
       console.log("ERROR : ", $xhr);
       console.log("ERROR : ", textStatus);
    }
    });
在这里,当发生错误时,它在控制台中向我显示:-
错误:
错误:{abort:f(e),总是:f(),…,responseJSON:“{”消息“:“failed”}”
错误:错误

因此,我知道我们必须使用$xhr.responseJSON来获取从RESTAPI发送的字符串消息

2) 修改/工作错误函数:

error : funtion($xhr,textStatus,errorThrown){
        var string= $xhr.responseJSON;
        var json_object= JSON.parse(string);
        console.log("ERROR : ",  json_object.message);
    }

因此,将在控制台上输出“错误:失败”。

@gdoron添加了要查看的链接和部分for@tibo,然后显示您的代码。有东西坏了。最好使用firebug或webkit在处理程序中暂停执行,只需查看参数的属性即可。它一定在某个地方…没有真正的挖掘,我现在不确定。您确定firebug中的响应主体为空吗?你确定url是正确的吗?您确定正在调用错误处理程序吗?这应该是可接受的答案-问题中的代码是正确的。这个问题完全超出了所提供信息的范围;这段代码没有错,问题出在其他地方。对于其他未来的读者来说,我也有类似的问题,虽然跨域问题与我的案例完全无关,但事实证明问题出在服务器端。(服务器代码似乎是以某种方式被破坏的,
Accept
等HTTP头的组合使其无法在400错误时返回正确的响应正文。)“$.parseJSON($xhr.responseText)”是关键!。如果不使用“.fail”,则使用error:function(xmlHTTP,status,httperror){$.parseJSON(xmlHTTP.responseText);}