4

mootoolsを使用するか、jQueryにジャンプするかについての私の永遠の内部の戦いで、jQueryのドキュメントで私の注意を引いたものを見つけました。これは、jQueryが別のドメインへのJSONを要求できることです。これは、通常、ブラウザーによって禁止されています。 。

クロスサブドメインのいくつかの回避策を見てきましたが、クロスドメインはありませんでした。最初はサーバーに関連していると思いましたが、もう少し実験して、jQueryからまったく同じJSONリクエストを実行することを確認しました。 Mootoolsのドキュメントが機能しません!

これはjQueryで動作します:

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
        function(data){
          $.each(data.items, function(i,item){
            $("<img/>").attr("src", item.media.m).appendTo("#images");
            if ( i == 3 ) return false;
          });
        });

これはMootoolsではありません:

var jsonRequest = new Request.JSON({url: "http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", onComplete: function(person, responseText){
    alert(responseText);
}}).get({});

この動作を再現するにはどうすればよいですか?何が原因ですか?

jQuery Doc:http: //docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback Mootols Doc: http: //mootools.net/docs/Request/Request.JSON

4

4 に答える 4

11

それはJSONPであるとページに書かれています。

JSONP は、サーバーが通常の応答を返す代わりに、ユーザー提供のメソッドのメソッド呼び出しにラップするトリックです。たとえば、次のようになります。

{"foo": "bar", "baz":"bah"}

次のように返されます。

temporaryCallbackFunctionName({"foo": "bar", "baz":"bah"});

jQuery は、一時的なコールバック関数を定義し、<script src="..."></script>要素を挿入します。これは、同じオリジン ポリシーによって制限されません。

スクリプトがロードされると、関数が実行され、それだけです。

欠点は、サーバーが悪意のある (またはハッキングされた) 場合、ブラウザーで任意のコードを実行できることです。

詳細はこちら

于 2009-04-07T17:34:17.980 に答える
3

プラグインJSONPを使用すると、MooTools で JSONP を使用できます。これは、MooTools のコア開発者の 1 人であるAaron Newtonによって作成されました。

于 2009-04-07T17:40:44.673 に答える
1

これは、v1.2.2(2009年4月23日にリリース)以降、MooToolsにさらに含まれています。

詳細については、このドキュメントページを確認してください。

于 2009-05-02T15:39:59.907 に答える
0

API ドキュメントとこのフォーラムによると、Mootools ではできないようです。

これが制限されている理由は、おそらくクロスサイト スクリプティング攻撃によるものです。

于 2009-04-07T17:13:54.223 に答える