2011-01-11 11 views
1

私は2つのドメインを持っています:www.domain1.comとwww.domain2.com外部JSONフィードからJSONPを作成するにはどうすればよいですか?

私はドメイン1にプレーンなJSONフィードを持っています。

domain1からJSONフィードを取得し、domain2のモジュールに配置したいとします。

私が読んだところでは、JSONPを使用する方法がありますが、その方法についてはどうしたらいいですか? JQuery/javascriptだけでそれを行う方法はありますか?または、サーバーサイドのコードを使用する必要がありますか(Coldfusionを使用しています)。また、私はちょうどオーケー

EDIT (私はまだアヤックス使ったことがないので、私は初心者です)アヤックス.getJSONを使用していない可能性があり、私はまだ混乱して取得しています。 URLの最後にコールバックを追加するだけで壊れてしまいました。どのように私はそれを作ることができますので、フィードのリモートパスの代わりに、私はこのコードがwww.domain2.comにある絶対パスを引っ張っていますが、フィードはwww.domain1.comにありますか?

var feed ="/event/json.tag/tag/sports/"; 

$.getJSON(feed,function(data) { 

    $.each(data.items, function(i,obj) { 

     do something here... 
    }   

} 
+0

「フィード」はどうして絶対ですか?あなたの方法は何ですか? 'タグ'?クエリ文字列を使用できませんか? – ifaour

+0

私はドメイン2に行くが、フィードはdomain1でホストされているモジュールを作っているので、フィードを絶対にする必要があります。これは、フィードのURLが設定されている方法です。 – meijiOrO

答えて

-1

あなたは(onCompleteの/するonSuccess)ドメイン1からJSON「フィード」を取得し、あなたの要求が完了したときに(ドメイン2上)独自のJavaScript関数へのパラメータとしてそのデータを渡すことができます。ウェブサイトで言及したよう

$.getJSON("http://api.oscar.aol.com/presence/get?k=key&f=json&t=aimuser&c=?", 
    function(result){ 
     if (result.response.data.users[0].state == 'online') { 
     $("#status").css("background-image", "url('online.jpg')"); 
     } 
    } 
); 

:jQueryのドキュメント$.ajax$.getJSONは良いスタートになります読ん

+0

例がありますか? – meijiOrO

0

が、とにかくJSONPについての良いチュートリアルがたくさんあり、例えばthis 1は素晴らしいチュートリアルです:我々の場合にはJSON -

Fパラメータがで結果を返すためにどのような フォーマットサービスに指示します。 cパラメータでは、使用するJSONコールバックを と指定しています - これは重要です です!

とjQueryのドキュメントで:

URLが文字列 含まれている場合は、 "コールバックを=?" (またはサーバー側APIで と定義されているように)、 という要求は代わりにJSONPとして処理されます。

コールバックを送信して後でデータを処理するのは簡単です。

EDIT:別の良いexample

EDIT2:

http://api.flickr.com/services/feeds/photos_public.gne:コールバック値を指定しない場合は
は、jQueryのは、FlickrのURLはになります($ .getJSONページから)あなたのためにそれを割り当てますか?jsoncallback = jsonp1294786450519 &タグ=猫& tagmode =任意の&形式= JSON

と応答:

jsonp1294786450519({ 
     "title": "Recent Uploads tagged cat", 
     "link": "http://www.flickr.com/photos/tags/cat/", 
     "description": "", 
     "modified": "2011-01-11T22:47:12Z", 
     "generator": "http://www.flickr.com/", 
     "items": [ 
     { .... rest of json 

ですから、domain1

+0

フィードは "/event/json.tag/tag/food"から "http://www.domain2.com/event/json.tag/tag/food?format=json&jsoncallback=?"の代わりになります。 – meijiOrO

+0

。私は '.com'が間違っているのを余儀なくされたと思います。 – ifaour

+0

しかし、domain1では 'callback'の値がJSONのようにラップされるようにする必要があります:' callback_value({JSON: ""}); '' content-type'は 'text/javascript'を 'text/application-json'の代わりに使用するdomain1の出力を制御できない場合は、domain2(PHPスクリプトなど)のデータをDOM1から取得してJSONPとして返すラッパースクリプトを作成する必要がありますまたは単にJSONを使用すると、同じドメインにいます。 – sholsinger

1
から送信されたコールバックを使用してJSONをラップする必要があります

JSONPは単なるJSONオブジェクトをラップするコールバック関数です。 一般的には、コールバックパラメータがリクエストで定義されていない限り、JSONを返すエンドポイントがあり、その場合JSONPが返されます。

その後、 http://www.domain1.com/api/getStuff?cb=cb123
{'foo': 'bar', 'fizz': 'buzz'} 

を返す必要があります:

すなわちhttp://www.domain1.com/api/getStuffが返される可能性があります

cb123({'foo': 'bar', 'fizz': 'buzz'}); 

私はColdFusionを知らないが、私は、この例では良好であると仮定します。http://www.coldfusionjedi.com/index.cfm/2009/3/11/Writing-a-JSONP-service-in-ColdFusion

なしにあります他の誰かがJSONPサポートをあなたが使っているサーバーに既に構築していない限り、クライアント専用のソリューションです...

関連する問題