我试图从这个URL获取此json对象:
https://test3.diavgeia.gov.gr/luminapi/opendata/dictionaries//KANONISTIKI_PRAXI_TYPE.json
你可能不会得到太多,因为它在希腊,但你得到json格式 .
这是我的代码:
function getDicts() {
api_url = 'https://test3.diavgeia.gov.gr/luminapi/opendata/dictionaries/KANONISTIKI_PRAXI_TYPE.json'
$.ajax({
headers: {
'Access-Control-Allow-Origin': '*',
},
url: api_url,
type: "GET",
crossDomain: true,
dataType: 'jsonp',
success: function(api_data) {
var obj = $.parseJSON(api_data);
console.log(obj);
},
error: function(error) {
console.log(error);
},
});
};
};
getDicts();
如果我使用json as the
dataType`我收到错误: SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the json data
这是我的电话截图:
这是一个小提琴:https://jsfiddle.net/danee/sz7tLru8/
UPDATE!
根据我发现的一些例子,我略微改变了这个功能 . 使用jsonp dataType
,在网络选项卡上我得到一个json对象,但在控制台上我得到了这个: SyntaxError: missing ; before statement[Learn More] KANONISTIKI_PRAXI_TYPE.json:1:7
这是使用 jsonp
调用的屏幕截图 .
这似乎是json对象上的错误?之前没遇到过 .
我也更新了小提琴,但我什么都没有,没有回应 .
2 回答
Url返回Json你没有解析它改变
var obj = $.parseJSON(api_data);
到var obj = api_data;
Update 您将数据类型设置为'JSONP'以解决交叉原点限制 . SO jquery现在准备以jsonp而不是json的形式获得响应,而真正的响应是json,这就是为什么会发生这样的错误:
因此,如果该api在您的团队中,您应该在那里更改CORDS以接受来自当前域的跨域请求并将数据类型从jsonp更改为json
引用问题
json Uncaught SyntaxError: Unexpected token :
您的Internet浏览器正在阻止CORS Ajax调用 . 作为一种解决方法,一种选择是部署您自己的Web应用程序,仅用于运行Web请求以定位
diavgeia.gov.gr
外部Web api,而不受此限制 .另一种选择是使用已经免费提供此服务的反向代理网站 . 他们将从服务器而不是Internet浏览器为您调用外部Web API,以便可以避免CORS .
如果您的互联网服务提供商(ISP)阻止了
Allorigins
,请尝试使用this list中的其他类似服务器 .https://cors-anywhere.herokuapp.com
http://www.whateverorigin.org
http://anyorigin.com
Note: 根据您的帖子,我'm assuming you don'有权访问网络API . 否则可以从那里启用CORS或者为返回jsonp而不是json进行更改 .