用于获取web api数据的jQuery AJAX调用返回语法错误

我试图从这个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: json数据的第1行第1列的意外字符

这是我的电话截图: 在此处输入图像描述

这是一个小提琴: https : //jsfiddle.net/danee/sz7tLru8/

UPDATE!

根据我发现的一些例子,我略微改变了这个function。 使用jsonp dataType ,在Network选项卡上我得到一个json对象但是在控制台上我得到了这个: SyntaxError:missing; 在陈述之前[了解更多] KANONISTIKI_PRAXI_TYPE.json:1:7

这是jsonp调用的截图。 在此处输入图像描述 这似乎是json对象的错误? 之前没遇到过。

我也更新了小提琴,但我什么都没有,没有回应。

您的Internet浏览器正在阻止CORS Ajax调用。 作为一种解决方法,一种选择是将您自己的Web应用程序部署为仅针对目标diavgeia.gov.gr外部Web api运行Web请求而不受此限制。

Internet浏览器 – (Ajax) – >您的Web服务器 – >目标网站

另一种选择是使用已经免费提供此服务的反向代理网站。 他们将从服务器而不是Internet浏览器为您调用外部Web API,以便可以避免CORS。

Internet浏览器 – (Ajax) – > 反向代理 – >目标网站

 let anonimizerUrl = 'https://allorigins.us'; var apiUrl = 'https://test3.diavgeia.gov.gr/luminapi/opendata/dictionaries/KANONISTIKI_PRAXI_TYPE.json'; $.ajax({ url: anonimizerUrl + '/get?url=' + encodeURIComponent(apiUrl), success: function(response) { //Although response is an object, the field contents is a string and needs to be parsed here. var data = JSON.parse(response.contents); console.log(data); }, error: function(request) { console.log(request.responseText); } }); 

如果Allorigins被您的互联网提供商(ISP)阻止,请尝试此列表中的其他类似服务器,包括。

注意:根据您的post,我假设您无权更改网络API。 否则可以从那里启用CORS或者为返回jsonp而不是json进行更改。

Url返回Json你没有解析它改变var obj = $.parseJSON(api_data); to var obj = api_data;

更新您将数据类型设置为“JSONP”以解决交叉原点限制。 SO jquery现在准备以jsonp而不是json的forms获得响应,而真正的响应是json,这就是为什么会发生这样的错误:

未捕获的SyntaxError:意外的令牌:

因此,如果该api在您的团队中,您应该在那里更改CORDS以接受来自当前域的跨域请求并将数据类型从jsonp更改为json

引用问题

json Uncaught SyntaxError:意外的令牌: