jQuery.parseJSON和HTTP状态

时间:2015-04-23 14:16:02

标签: jquery http zend-framework2 status

我正在尝试返回带有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时,我遇到了这个问题。

我不知道是否发生这种情况是因为浏览器没有传递响应主体,假设状态代码为响应本身,但这并不会改变服务器发送消息的事实。

有没有办法可以阅读它? 我做错了吗?

感谢。

1 个答案:

答案 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));
        });
    },