【发布时间】: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 负载,它可以工作。
这个错误看起来是一个解析错误。
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