首页 文章

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

提问于
浏览
0

我试图从这个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

这是我的电话截图:
enter image description here

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

UPDATE!

根据我发现的一些例子,我略微改变了这个功能 . 使用jsonp dataType ,在网络选项卡上我得到一个json对象,但在控制台上我得到了这个: SyntaxError: missing ; before statement[Learn More] KANONISTIKI_PRAXI_TYPE.json:1:7

这是使用 jsonp 调用的屏幕截图 .
enter image description here
这似乎是json对象上的错误?之前没遇到过 .

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

2 回答

  • 1

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

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

    Uncaught SyntaxError:意外的令牌:

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

    引用问题

    json Uncaught SyntaxError: Unexpected token :

  • -1

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

    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);
      }
    });
    

    如果您的互联网服务提供商(ISP)阻止了 Allorigins ,请尝试使用this list中的其他类似服务器 .

    Note: 根据您的帖子,我'm assuming you don'有权访问网络API . 否则可以从那里启用CORS或者为返回jsonp而不是json进行更改 .

相关问题