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

时间:2017-11-15 07:46:45

标签: javascript jquery json ajax

我正在尝试从此网址中获取此对象:

https://test3.diavgeia.gov.gr/luminapi/opendata/dictionaries//KANONISTIKI_PRAXI_TYPE.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();

如果我使用 as the dataType`,我会收到错误消息:   SyntaxError:JSON.parse:数据第1行第1行的意外字符

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

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

更新<!/强>

根据我发现的一些例子,我略微改变了这个功能。使用 dataType,在“网络”标签上,我确实获得了一个对象,但在控制台上我得到了这个: SyntaxError:missing;在声明之前[了解更多] KANONISTIKI_PRAXI_TYPE.json:1:7

以下是jsonp来电的屏幕截图。 enter image description here  这似乎是对象的错误?哈文以前没遇到过。

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

2 个答案:

答案 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

引用问题

json Uncaught SyntaxError: Unexpected token :