gpt4 book ai didi

jquery - 使用 JSONP 时如何处理 jQuery $.getJSON 错误响应?

转载 作者:行者123 更新时间:2023-12-01 08:02:14 25 4
gpt4 key购买 nike

我有一个 RESTful 应用程序,当遇到应用程序错误时,它会返回 HTTP 400 和 JSON 编码的响应正文:

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,响应正文是有效的 JSONP:

jQuery20305847647329799524_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?但它似乎与捕获错误有关,而不是与处理错误响应内容有关。

最佳答案

答案(在@Felix Kling的帮助下):

如果 JSONP 服务器返回 HTTP 400 状态,则无法接收 JSONP 响应。

说明:

JSONP 的工作原理是让客户端包含一个远程(服务器端)Javascript,该 Javascript 在客户端执行时会生成所需的 JSON 响应。如果是 HTTP 400,则脚本永远不会在客户端执行。

解决方法:

  • 始终返回带有 HTTP 200 OK 的 JSONP 错误消息/异常,或者
  • 使用跨源资源共享 (CORS)。在客户端上使用 jQuery 时,启用 CORS 的最简单方法是在服务器上设置额外的 Access-Control-Allow-Origin: * header 。

有关 CORS 的进一步阅读,请参阅 http://docs.kendoui.com/howto/use-cors-with-all-modern-browsershttp://www.html5rocks.com/en/tutorials/cors/?redirect_from_locale=de#toc-cors-from-jquery

关于jquery - 使用 JSONP 时如何处理 jQuery $.getJSON 错误响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19022720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com