我正在尝试从此网址中获取此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/
更新<!/强>
根据我发现的一些例子,我略微改变了这个功能。使用jsonp dataType
,在“网络”标签上,我确实获得了一个json对象,但在控制台上我得到了这个:
SyntaxError:missing;在声明之前[了解更多] KANONISTIKI_PRAXI_TYPE.json:1:7
以下是jsonp
来电的屏幕截图。
这似乎是json对象的错误?哈文以前没遇到过。
我也更新了小提琴,但我什么都没有,没有回应。
答案 0 :(得分:1)
您的互联网浏览器阻止了CORS Ajax呼叫。作为一种解决方法,一种选择是部署您自己的Web应用程序,仅用于运行Web请求以定位diavgeia.gov.gr
外部Web api,而不受此限制。
互联网浏览器 - (Ajax) - &gt;您的网络服务器 - &gt;目标网站
另一种选择是使用已经免费提供此服务的反向代理网站。他们将从服务器而不是Internet浏览器为您调用外部Web API,以便可以避免CORS。
互联网浏览器 - (Ajax) - &gt; 反向代理 - &gt;目标网站
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);
}
});
如果您的互联网服务提供商(ISP)阻止Allorigins
,请尝试this list中的其他类似服务器,包括。
注意:根据您的帖子,我假设您无权修改网络API。否则可以从那里启用CORS或者为返回jsonp而不是json进行更改。
答案 1 :(得分:-1)
Url返回Json你没有解析它
改变var obj = $.parseJSON(api_data);
至
var obj = api_data;
<强>更新强> 您将数据类型设置为“JSONP”以解决交叉原点限制。 SO jquery现在正准备以jsonp而不是json的方式获得响应,而真正的响应是json,这就是为什么会发生这样的错误:
Uncaught SyntaxError:意外的令牌:
因此,如果该api在您的团队中,您应该在那里更改CORDS以接受来自当前域的跨域请求并将数据类型从jsonp更改为json
引用问题