ajax读取数据失败,关于javascript:jQuery Ajax-如何获取错误的响应数据

在jQuery中使用AJAX发送POST请求时,遇到服务器返回非200状态码的情况,错误处理函数会被调用。错误处理函数的jqXHR参数包含了响应数据。通过`jqXHR.responseText`可以获取到服务器返回的JSON字符串,然后使用`$.parseJSON()`解析成JSON对象。文章描述了如何在错误回调中正确获取并处理JSON响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个简单的Web应用程序。

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

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

在jQuery中,我使用" ajax"函数创建POST请求。当服务器返回的内容不同于HTTP代码200(确定)时,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:"/rest/register",

data: postData,

success: function(data) {

showResultSucceed(data);

hideWaitingDone();

},

error: function (jqXHR, textStatus, errorThrown) {

showResultFailed(jqXHR.responseText);

hideWaitingFail();

}

})

}

2)在查看Firebug控制台时,响应似乎为空。

当使用REST测试工具调用相同的请求时,我得到一个带有JSON对象的响应。

我究竟做错了什么?

如果您没有将其降低到可接受的答案之内; 该代码没有错,问题出在其他地方。

对于其他未来的读者,我也遇到了类似的问题,尽管跨域问题与我的情况完全无关,但事实证明,问题出在服务器端。 (似乎服务器代码已被破坏,以至于HTTP标头(如Accept)的某种组合使其无法在出现400错误时返回正确的响应主体。)

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

$.ajax({

url: '/path/to/script.php',

data: {'my':'data'},

type: 'POST'

}).fail(function($xhr) {

var data = $xhr.responseJSON;

console.log(data);

});

从文档:

If json is specified, the response is parsed using jQuery.parseJSON before being passed, as an object, to the success handler. The parsed JSON object is made available through the responseJSON property of the jqXHR object.

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

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

直接从文档

The jQuery XMLHttpRequest (jqXHR) object returned by $.ajax() as of

jQuery 1.5 is a superset of the browser's native XMLHttpRequest

object. For example, it contains responseText and responseXML

properties, as well as a getResponseHeader()

因此,请使用jqXRH参数并将其responseText属性关闭。

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

jqXHR对象

我读了 responseText为空

@gdoron添加了链接和部分以查找

@tibo,然后向我们显示您的代码。 出事了。 最好是使用firebug或webkit暂停处理程序中的执行,而只需查看参数的属性即可。 它必须在某个地方...

我刚刚将代码添加到问题中。 你能帮我吗?

没有真正深入,我不确定这一点。 您确定响应主体在Firebug中为空吗? 您确定网址正确吗? 您确定正在调用错误处理程序吗?

这应该是公认的答案-问题中的代码正确。 问题完全超出了所提供信息的范围。

当我使用multipart / form-data时,我也面临同样的问题。起初我以为multipart / form-data会造成混乱,但后来我找到了正确的解决方案。

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

}

});

在这里,当发生错误时,它在控制台中向我显示了这一点:

错误:

错误:{中止:f(e),始终:f(),....,responseJSON:" {"消息":"失败"}"}}

错误:错误

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

2)修改/工作错误功能:

error : funtion($xhr,textStatus,errorThrown){

var string= $xhr.responseJSON;

var json_object= JSON.parse(string);

console.log("ERROR :",  json_object.message);

}

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

在解决这个问题上花了很多时间后,我发现了问题。

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

REST api在URL下:server.mydomain.com/rest

似乎这种POST并不是那么简单。

我将搜索更多信息以更好地理解此问题(如果您有更多信息,请与我分享)。

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

您可以接受其他答案之一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值