我正在尝试返回带有402状态代码和JSON内容的http响应,没关系,但是当我尝试使用JQuery.parseJSON(json)读取此响应主体时会出现问题。
$response = new \Zend\Http\Response();
$response->setStatusCode(402);
$response->setContent(json_encode([
"success" => false,
"message" => "You need to buy more credits"
]));
return $response;
然后我尝试阅读回复内容:
search: function(term, callback){
$.post("/api/v1/client/search", {term: term}).always(function(data){
callback(jQuery.parseJSON(data));
});
},
我收到以下错误:“Uncaught SyntaxError:Unexpected token o”。当我使用200状态代码时一切正常,但当我将其更改为402时,我遇到了这个问题。
我不知道是否发生这种情况是因为浏览器没有传递响应主体,假设状态代码为响应本身,但这并不会改变服务器发送消息的事实。
有没有办法可以阅读它? 我做错了吗?
感谢。
答案 0 :(得分:0)
我已经解决了这个问题。当我在PHP中更改状态标头时,我发现jQuery返回的对象发生了变化。当状态代码为200时,jQuery返回一个字符串,当状态代码为402时,jQuery返回一个对象,我正在寻找的文本是该对象的“responseText”属性。
http://i.imgur.com/T7fuInW.png
我的解决方案是:
search: function(term, callback){
$.post("/api/v1/client/search", {term: term}, function(data){
callback(JSON.parse(data));
})
.fail(function(data){
callback(JSON.parse(data.responseText));
});
},