jQuery.parseJSON 和 HTTP 状态

jQuery.parseJSON and HTTP Status

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

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

有什么方法可以阅读吗? 我是不是做错了什么?

谢谢。

我已经解决了这个问题。当我在 PHP 中更改我的状态 header 时,我检测到 jQuery 返回的 object 发生了变化。当状态码为200时,jQueryreturns一个字符串,当状态码为402时,jQueryreturns一个object,而我要找的文字是这个object.

的"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));
        });
    },