2017-02-12 1 views
-2

私は最近、AJAX呼び出しを行う方法を学び、外部のサーバーからAPIを操作する際にJSONPを使用する必要があることを知りました。私がsitepointから学んだように、JSONPの違いは、スクリプトタグを通してアクセス可能にする関数にラップされているということです。データをJSONPとしてどのように分類し、どのようにプレーンなjavascriptで取得できますか?

SitePointリンク:https://www.sitepoint.com/jsonp-examples/ 例えば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の変更です。

だから、flickr JSONPのXMLはどのようなものになりますか?また、プレーヤの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

* "なぜflickr JSONPのXMLを作るのですか?" *何も、JSONPが返すリンクからの応答は返されません。 XMLを返します。例えば、[JSONP Wikipediaの記事を読む](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は異なるものです。ただし、コールバック呼び出しの中のビットは有効なJSONです(すべてのJSONP応答がそうであるわけではありません)。

ここでは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のため、コールバックの名前を制御するパラメータのための非標準名を使用していることを、あなたはにjQueryのどのようなパラメータ名を伝えるjsonpオプションが必要つかいます。

+0

ここでは、jQueryを使ってajax呼び出しを行うflickr XMLを使用して作業コードを作成しています。 https://jsfiddle.net/Jonathan002/05ao4d87/ これは、treehouseのJSONPによってのみ可能になったと教えられました。 https://///////このタスクを達成するためにJSONPを使用していない場合、私は同じ発信元ポリシーを迂回することができますか? – Jonathan002

+0

申し訳ありませんが、altを入力しようとしたときにテキストが入力され、早めに投稿されました。私はちょうど今答えを更新しました。 – Jonathan002

+0

@ Jonathan002:あなたはあなたの 'flickrOptions'で' format: "json" 'を使ったのでJSONPを使っています。これはURLに追加されます。 (これはブラウザの[ネットワーク]タブで見ることができます。これらのオプションのために '$ .getJSON'によって要求された実際のURLは' https://api.flickr.com/services/feeds/photos_public.gne?jsoncallbackです= jQueryblahblahblah&tags = Dog&format = json&_ = 1486914520263'( 'jsoncallback'と' _'の値は異なります)私は 'jsonp'オプションなしで動作していますが、jQueryは' callback =? 'それが部分一致かどうか心配することなく。 –

関連する問題