【问题标题】:getJSON returns 200 but errorsgetJSON 返回 200 但错误
【发布时间】:2026-02-02 04:40:01
【问题描述】:

我正在尝试编写一些简单的 Javascript 来从 URL 加载 JSON 有效负载。

我知道我有 CORS 问题,目前我对此很好。 我可以禁用 chrome 的检查。

我遇到的问题是我得到了 200 OK 响应,但也是一个错误,我不明白为什么。

var urlAddress = "https://light-ratio-149809.appspot.com/ESI-OrgUnitService?jsoncallback=?";
$.getJSON(urlAddress, {
  format: "json"
})
.always(function( jqXHR, textStatus, errorThrown ) { 
  console.log("reponse textStatus["+textStatus+"] errorThrown["+errorThrown+"] [" + jqXHR.responseText + "]"); 
})
.done(function(data) {
  console.log("success");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

谁能告诉我哪里出错了?

如果我使用这个 JSON 负载,它可以工作。

https://gist.githubusercontent.com/Miserlou/c5cd8364bf9b2420bb29/raw/2bf258763cdddd704f8ffd3ea9a3e81d25e2c6f6/cities.json

这个错误看起来是一个解析错误。

reponse textStatus[parsererror] errorThrown[Error: jQuery331004379421802427674_1551456238952 未被调用] [未定义]

【问题讨论】:

  • 究竟是什么错误?
  • 可能返回文本不是json,解析失败。经典的 jQuery 陷阱
  • 如果您返回 JSON,为什么它的 URL 上有 jsonp 参数?
  • 响应是有效的 JSON,但不是有效的 JSONP。您无法通过假装服务器在没有返回 JSONP 响应时绕过 CORS 限制
  • parseError 是因为 jQuery 认为您期待的是 JSONP 响应(即一些可执行的 Javascript),而不仅仅是数据。它认为是因为您添加了 jsonCallback 查询字符串参数。删除它后,它会返回到预期的常规 JSON,但随后会被服务器的 CORS 限制所击败。正如我所说,您无法通过假装想要接收 JSONP 而绕过 CORS,而这实际上并不是服务器返回的内容。我建议您了解该服务器是否确实具有 JSONP 端点,或者您的应用是否可以添加为允许的 CORS 客户端。

标签: javascript jquery json ajax getjson


【解决方案1】:

parseError 是因为 jQuery 认为您期待的是 JSONP 响应(即一些可执行的 Javascript),而不仅仅是 JSON 数据。它认为是因为您在 URL 中添加了 jsonCallback 查询字符串参数。

一旦您删除它,它就会返回到预期的常规 JSON(这是端点返回的内容),但随后会因服务器的 CORS 限制而失败。

当服务器实际上返回的不是 JSONP 时,您无法通过假装想要接收 JSONP 来绕过 CORS。我建议您了解该服务器是否确实具有 JSONP 端点,或者您的应用是否可以添加为允许的 CORS 客户端。

【讨论】:

    最近更新 更多