2012-02-29 67 views
1

我讀this articlethis。我如何採用腳本標記來查詢跨域的以下內容:使用腳本標記跨域AJAX

var nytimes_api = 'http://api.nytimes.com/svc/semantic/v2/concept/article/2010/10/06/business/media/06tribune.json?&fields=article_list&api-key=4949d84e6ed8e55dbd7352d88da21f6d:9:65735612'; // returns JSON 
// code accessing nytimes_url 
// and retrieving data from it 

謝謝。

+0

NYTimes是否會返回純JSON?如果是這樣的話,鏈接到的文章中的JSONP技術將無法工作。如果NYTimes設置爲處理JSON-P,那麼你可以很容易地用jQuery調用它:看看[jQuery.ajax()'doco頁面](http://api.jquery.com/jQuery.ajax /)說關於JSONP。 (你提到的技術並不是真正的Ajax,只是這一點 - 尤其是像jQuery這樣的庫 - 你的代碼可以以類似的方式使用它。) – nnnnnn 2012-02-29 00:14:55

+0

NYTimes不支持JSONP;它只是JSON – 2012-02-29 00:16:17

回答

2

研究JSONP並查看NYTimes API是否支持它以及如何使用它。

參考文章:用谷歌搜索JSONP

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

http://remysharp.com/2007/10/08/what-is-jsonp/

大量更多的參考。

簡而言之,JSONP使用帶有參數的自定義URL向遠程站點發出腳本請求。通常,其中一個參數是您的JavaScript函數名稱,即返回的JavaScript在具有數據時將調用它。所以,你做了遠程站點的腳本請求。遠程服務器獲取腳本請求。它解析出URL中的參數,看看你要做的事情。其中一個參數是一個javascript函數名稱。遠程服務器然後返回一些JavaScript。該javascript的一部分通常是您請求的數據以及您在URL中指定的JavaScript函數名稱的調用。當瀏覽器執行返回的javascript時,您的函數調用會以請求的數據作爲參數進行調用。

數據返回的細節取決於API的實現者,並且您將必須從NYTimes API描述中獲得這些信息。

您只能將此JSONP技術與明確支持它的API一起使用。

+0

好的,謝謝JSONP的清晰解釋。之前我對此有一個朦朧的理解,但現在我認識到NYTimes不支持JSONP,所以我猜這條路線是行不通的。 – 2012-02-29 00:17:33

0

爲了以您描述的方式使用腳本標記,您要請求數據的API需要支持JSONP。更具體地說,它需要支持傳遞參數(如?callback=myFunction),然後將其輸出封裝在該函數中,以便可以將數據作爲腳本執行。

例如,如果/api.json返回類似這樣:

{'name': 'Bob'} 

您將需要/api.json?callback=myFunction返回:

myFunction({'name': 'Bob'}); 

然後,您可以使用類似jQuery's $.getJSON function來處理你的劇本創作。

不幸的是,它看起來並不像紐約時報API當前支持JSONP,儘管有open request for it

爲了在不使用JSONP的情況下使用此API,您將需要一些服務器端組件來爲您提出請求。

+0

好的,謝謝。我將不得不再看看這一點。 – 2012-02-29 00:18:37