簡體   English   中英

jQuery AJAX調用以獲取Web API數據返回語法錯誤

[英]jQuery AJAX call to fetch web api data returns syntax error

我正在嘗試從以下網址獲取此對象:

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列出現意外字符

這是我通話的屏幕截圖: 在此處輸入圖片說明

這是一個小提琴: https : //jsfiddle.net/danee/sz7tLru8/

更新!

在找到一些示例之后,我對功能進行了少許更改。 使用 dataType ,在“網絡”選項卡上我確實獲得了一個對象,但是在控制台上卻得到了: SyntaxError:missing; 聲明前[了解更多] KANONISTIKI_PRAXI_TYPE.json:1:7

這是與jsonp通話的屏幕截圖。 在此處輸入圖片說明 這似乎是對象上的錯誤? 以前沒有遇到過。

我也更新了小提琴,但是我什么也沒收到,也沒有回應。

您的互聯網瀏覽器阻止了CORS Ajax呼叫。 作為一種解決方法,一種選擇是部署您自己的Web應用程序,僅用於運行將web請求diavgeia.gov.grdiavgeia.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);
  }
});

如果Allorigins被您的Internet提供商(ISP)阻止,請嘗試從該列表中選擇另一台類似的服務器,包括。

注意:根據您的帖子,我假設您無權更改Web api。 否則,可以從那里啟用CORS或進行更改以返回jsonp而不是json。

Url返回您var obj = $.parseJSON(api_data);解析的Json更改var obj = $.parseJSON(api_data); var obj = api_data;

更新您將數據類型設置為“ JSONP”以解決跨原點限制。 因此,jQuery現在正准備以jsonp而不是json的形式獲取響應,而真正的響應是json,這就是為什么發生此錯誤的原因:

未捕獲到的SyntaxError:意外令牌:

因此,如果該api在您的團隊中,則應在其中更改CORDS以接受來自當前域的跨域請求,並將數據類型從jsonp更改為json

推薦人問題

json未捕獲的SyntaxError:意外令牌:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM