2012-04-20 55 views
2

正如標題所示,我試圖從api提供的api中檢索json。我已經嘗試了各種各樣的東西,並得到了不同的結果。我希望能夠檢索和解析json以獲取我想要的信息。以下是我已經試過:當按鈕被點擊

1)$阿賈克斯() 代碼塊(運行):

$.ajax({ 
      type: 'GET', 
      url: url, 
      dataType: 'json', 
      success: function(data) { 
       alert('Success!'); 
      } 
     }); 

這將產生一個「原產地空沒有被訪問控制允許 - 允許原產地「。錯誤,並沒有得到服務器的響應(對於Chrome或FF,我不關心IE,因爲這是我使用的一個小項目)。 Looking around我想這個問題可能是因爲我想連接到一個外部網站,所以我需要它是一個jsonp數據類型。這導致我嘗試#2

2)$就用JSONP的dataType

$.ajax({ 
     type: 'GET', 
     url: url, 
     dataType: 'jsonp', 
     success: function(data) { 
      alert('Success!'); 
     } 
    }); 

我還附加 「&回調=?」到我給該函數的「url」的末尾。使用Chrom的開發工具這次我可以看到來自服務器的響應,但警報從不顯示。我使用JSONLINT來確認響應是一個合適的json(它是),並且我已經嘗試將json設置爲一個變量,以便我可以使用它(沿着初始化腳本標記[var response; ]並試圖將json分配給它[response = data;])。當我嘗試提醒(響應)時,這產生未定義的;後來(我不相信response = json;有些位因爲某種原因被調用)。

我也嘗試過使用$ .getJSON,但看着它的api它顯然只是運行$ .ajax無論如何(我幸運地獲得相同的響應/錯誤時,嘗試json vs jsonp爲$ .getJSON,因爲我做嘗試$ .ajax)。當我嘗試作爲jsonp Chrome(FF不會產生此錯誤)時顯示「意外的語法錯誤:意外的標記:」。 This讓我覺得我正在嘗試與之交談的網站沒有jsonp工作,並且我無法像訪問json請求那樣訪問第三方網站。該鏈接討論如何設置服務器返回application/json而不是text/html,就像我從我的回覆中得到的那樣,爲他們解決了問題(但是,我試圖訪問第三方網站,因此我可以不能訪問服務器)。

我已經在Chrome和FF中試過這個,並查看了開發工具/ Firebug for each,並且看到了相同的東西(儘管FF不會產生原點錯誤,但顯然這是Chrome的一個錯誤)。

另外:我已經採取了json響應返回並運行$ .parseJSON對它,並能夠抓住各種片斷,但我怎樣才能訪問json一旦我得到$ .ajax/$。getJSON工作?

任何想法/解決方案將不勝感激。

+0

可能是跨域的起源策略的問題。你需要檢查你的服務器API是否支持跨域。 – shashankaholic 2012-04-20 20:09:23

回答

0

我曾經有過Unexpected Syntax Error: Unexpected token :的錯誤。

這似乎是該網站不支持跨域加載。 你試圖使用什麼API?

0

很可能該響應是有效的JSON,但不是有效的JSONP。第三方服務器必須支持JSONP才能獲得JSONP響應。如果你沒有第三方服務器的控制權,你唯一真正的選擇是使用服務器端代理或YQL。

0

請勿將JQuery AJAX用於JSONP。

使用<script type='text/javascript' src=' URL_GOES_HERE&callback=BLAH '></script>它將通過javascript方法調用環繞json對象,然後可以使用來自第三方源的數據。

http://en.wikipedia.org/wiki/JSONP

+1

我需要能夠動態地改變網址。我使用下拉菜單來選擇我想要查看的類別(我的網址末尾是「/api/catalogue/category.json?category=」,其中我在下拉列表中追加所選類別的值。 這似乎如果您的建議有效,我該如何訪問json?您可以舉一個例子嗎? – Redrascal 2012-04-20 20:26:34

+0

我試圖將它嵌入'

0

你試過這種方法嗎?

$.getJSON(url + "?callback=?", function(data) { 
    console.info(JSON.stringify(data, null, 2)); 
}); 

這基本上是我如何管理我的JSONP回調http://freegeoip.net/json/