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