我有一个RESTful应用程序在遇到应用程序错误时返回带有JSON编码的响应主体的HTTP 400:
Request URL: http://.../middleware.php/entity/23.json?padding=jQuery20305847647329799524_1380182255277&_=1380182255278
Request Method: GET
Status Code: HTTP/1.1 400 Bad Request
Server: Apache/2.2.14 (Ubuntu)
Date: Thu, 26 Sep 2013 07:57:36 GMT
Content-Type: application/json
Content-Length: 133
根据FF:
,响应正文是有效的JSONPjQuery20305847647329799524_1380182255277({"version":"0.2","exception":{"message":"Invalid UUID: '23'","type":"Exception","code":0}});
我正在努力处理失败:
$.getJSON("http://demo.volkszaehler.org/middleware.php/entity/23.json?padding=?").fail(
function(jqXHR, textStatus, errorThrown) {
console.error(JSON.stringify(jqXHR));
console.error(jqXHR.responseText);
}
);
不幸的是,jqXHR在FF25和Chrome上只有以下属性:
{"readyState":4,"status":404,"statusText":"error"}
responseText本身显示为""
,我无法解码操作JSON响应正文。
如何在fail()
方法中解析实际的JSON响应正文?
注意:我见过How do I catch jQuery $.getJSON (or $.ajax with datatype set to 'jsonp') error when using JSONP?但它似乎与捕获错误有关,而与处理错误响应内容无关。
答案 0 :(得分:3)
回答(在@Felix Kling的帮助下):
如果JSONP服务器返回HTTP 400状态,则无法接收JSONP响应。
<强>解释强>
JSONP的工作原理是使客户端包含一个远程(服务器端)Javascript,在客户端执行时生成所需的JSON响应。在HTTP 400的情况下,脚本永远不会在客户端执行。
<强>解决方法:强>
Access-Control-Allow-Origin: *
标头。有关CORS的进一步阅读,请参阅http://docs.kendoui.com/howto/use-cors-with-all-modern-browsers和http://www.html5rocks.com/en/tutorials/cors/?redirect_from_locale=de#toc-cors-from-jquery