2017-02-12 22 views
-2

因此,我最近學會了如何進行AJAX調用,並知道在使用來自外部服務器的API時需要使用JSONP。正如我從sitepoint瞭解到的,有人指出,JSONP的不同之處在於它被封裝在一個函數中,通過腳本標籤可以訪問它。將數據歸類爲JSONP以及如何使用普通的JavaScript獲取它?

SitePoint鏈接:https://www.sitepoint.com/jsonp-examples/ E.g http://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-2.json

雖然我不明白的是爲JSONP Flickr的API。

Flickr API鏈接JSONP: https://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=Flickr API鏈接XML: https://api.flickr.com/services/feeds/photos_public.gne

它似乎是返回XML數據。更讓我困惑的是,這種類型的xml被jQuery的$ .getJSON()所接受,而它在xml中的原始api也會導致相同的原始策略錯誤。我可以在它們之間找到的主要區別是幾個href的變化。

那麼是什麼讓XML的Flickr JSONP,以及如何在普通的JavaScript中使用它的Ajax調用?

任何對此的反饋,將不勝感激:)爲清楚起見

更新:

Here I have working code using the flickr XML that does an ajax call with jQuery. 

鏈接:https://jsfiddle.net/Jonathan002/05ao4d87/

我被教導,這只是通過JSONP中成爲可能樹屋。 https://teamtreehouse.com/library/ajax-basics/ajax-and-apis/displaying-the-photos。如果我沒有使用JSONP來完成這項任務,那麼我能夠繞過同樣的原產地政策呢?

+1

*「那麼是什麼讓XML的flickr JSONP ......」*沒有,你說的鏈接的迴應JSONP沒有。它返回XML。例如,我建議做更多的研究,[閱讀JSONP維基百科文章](http://en.wikipedia.org/wiki/JSONP#JSONP)。 –

回答

2

您說過的鏈接返回JSONP不,它返回XML。 flickr documentation告訴我們您需要在URL中使用format=json;你也想填寫?這樣的名稱,因此你可以命名回調函數(儘管如果你使用jQuery,它會爲你做)。例如:https://api.flickr.com/services/feeds/photos_public.gne?format=json&jsoncallback=callbackName

注意:他們稱之爲JSON,但事實並非如此。這是JSONP。 JSONJSONP是不同的東西。儘管(不是所有的JSONP響應都是),但對回調調用中的位是有效的JSON。

這裏有JSON的例子:

{"foo": "bar"} 

這裏的回調中使用有效的JSON JSONP的例子:

callbackName({"foo": "bar"}) 

這裏的回調中使用無效的JSON JSONP的例子(但因爲JSONP和JSON是不同的東西):

callbackName({foo: "bar"}) 

我怎樣才能得到它與純JavaScript?

jQuery documentation for $.ajax描述瞭如何使用jQuery進行JSON調用。在這種情況下:

$.ajax({ 
 
    url: "https://api.flickr.com/services/feeds/photos_public.gne?format=json", 
 
    dataType: "jsonp", 
 
    jsonp: "jsoncallback", 
 
    success: function(data) { 
 
     // Use the data here 
 
     console.log("The title is: " + data.title); 
 
    }, 
 
    error: function() { 
 
     // Handle error here 
 
     console.log("Error loading the data"); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

注意,因爲Flickr的是爲控制回調的名稱的參數使用非標準的名稱,你需要的jsonp選項告訴jQuery的什麼參數名使用。

+0

這裏我有使用flickr XML的工作代碼,它使用jQuery進行ajax調用。 https://jsfiddle.net/Jonathan002/05ao4d87/ 我被教導說,這隻有通過樹屋中的JSONP才能實現。 https://teamtreehouse.com/library/ajax-basics/ajax-and-apis/displaying-the-photos。如果我沒有使用JSONP來完成這項任務,那麼我能夠繞過同樣的原產地政策呢? – Jonathan002

+0

對不起,當我試圖讓別人輸入並提前發佈時,輸入了文字。我剛纔更新了答案。 – Jonathan002

+0

@ Jonathan002:您正在使用JSONP,因爲您在'flickrOptions'中使用了'format:「json」',它會附加到URL中。 (您可以在瀏覽器的「網絡」選項卡中看到此內容;由於這些選項,「$ .getJSON」請求的實際URL是https://api.flickr.com/services/feeds/photos_public.gne?jsoncallback = jQueryblahblahblah&tags = Dog&format = json&_ = 1486914520263'('jsoncallback'和'_'的值有所不同)我有點驚訝,它沒有使用'jsonp'選項,但我猜jQuery只是尋找'callback =?'不用擔心它是否是部分匹配 –

相關問題