getJSON返回200但出现错误

时间:2019-03-01 15:50:19

标签: javascript jquery json ajax getjson

我正在尝试编写一些简单的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

该错误似乎是解析错误。

  

响应textStatus [parsererror] errorThrown [Error:   jQuery331004379421802427674_1551456238952未调用] [未定义]

1 个答案:

答案 0 :(得分:1)

parseError是因为jQuery认为您期望的是JSONP响应(即某些可执行Javascript),而不仅仅是JSON数据。它认为是因为您向URL添加了jsonCallback querystring参数。

一旦删除它,它可以返回到期望的常规JSON(端点返回的内容),但是随后被服务器的CORS限制所破坏。

当服务器返回的实际上不是真正的JSONP时,您无法假装要接收JSONP,从而无法获得全面的CORS。我建议您找出该服务器是否确实具有JSONP端点,或者是否可以将您的应用添加为允许的CORS客户端。