0

私はJavaScriptとAJAXをかなり前から使用していますが、Cross Domain XHRが実際にどのように機能し、JQueryがそれをどのように処理するかを理解したいと思います。何らかの理由で、実際にどのように機能するかを考えたことはありません。ウィキペディアのJSONPの記事を読みましたが、もっと混乱しています。何がわからないのかわかりません。

私は、JavaScriptを使用してデータを直接JSONP消費できることを認識しています。JSONたとえば、このJSFiddleの例。ここではJSON、画像のリストを表示するために使用しています。XML代わりにデータを使用して同じことを達成できますか?質問のこの部分に答える前に、アナロジーの残りの部分を読んでください。

1)以下のようなものやフィドルリンクを試してみるとエラーが発生しますUncaught ReferenceError: jsonFlickrFeed is not defined

​$.ajax({
    url: "http://api.flickr.com/services/feeds/photos_public.gne",
    data: {
        format: "json"
    },
    dataType: "jsonp",
    success: function(d) {
        console.log(d);
    }
});​

2)以下の例またはフィドルリンクは正常に機能します

$.ajax({
    url : "http://api.flickr.com/services/feeds/photos_public.gne",
    data: {format: "json"},
    dataType: "jsonp"
});
jsonFlickrFeed = function(d){
    console.log(d);
}

jsonFlickrFeed({})Q)返されるデータは、 jsonFlickrFeedコールバック関数を記述して機能させる必要があるような形式であるため、1から2の間だと思いますか?

Q)成功コールバックを呼び出さないのはなぜですか?

Q)JSONP(つまりフォーマットのデータjsonFlickrFeed({}))を返す仕事をするのはFlickrエンドポイントですか?それとも、実際のJSONを返すだけで、JQueryがそれを埋めますか?

3)$.getJSONコードは以下またはフィドルのようなものです

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", {
    format: "json"
}, function(d) {
    console.log(d)
});​

Q)ケース3)の場合、JQueryはどのように処理しますか?返されたデータが形式であることがわかりますjQuery1820349100150866434_1355379638775({})。JQueryがJSONをコールバックに関連付ける仕事をしていると仮定すると、それは正しいですか?

Q)上記の理由から、JQueryの略記法と呼ばれていますか?

私が試したものは何でも、XMLデータを消費できませんでした。JSONの代わりにXMLデータを使用する方法を考えることができませんでした。

Q)同様の方法でJSONの代わりにXMLデータを使用することは可能ですか?

Q)それ以外の方法でこれを行うことを考えることができる唯一の方法は、同じドメインを介してデータをプロキシすることです。この理解は正しいですか?

ここで役立つ場合は、dropboxにあるXMLの例を示します。これは、XMLデータが同じドメインから発信された場合に解析できることを示すためです。

4

2 に答える 2

1

Q) 同様に JSON の代わりに XML データを使用することは可能ですか?

いいえ、JSONP は json ではないため、javascript です。クライアントは、クライアントで実行されるサーバーからのスクリプトを必要としています。「JSONP」はscriptタグを使ってjavascriptのオブジェクトを取得する裏技です。XML を文字列で送信しても、javascript オブジェクトで送信できます。

Q) 私が考える唯一の方法は、同じドメインを介してデータをプロキシすることです。この理解は正しいでしょうか?

またはサーバーがCORSをサポートするようにします

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

私のポイントは、ドメインがデフォルトでクライアントスクリプトからの X-origin リクエストを許可しない場合、それについて何もできないということです。一部のブラウザでは許可される場合がありますが、デフォルトの動作ではありません。その場合、唯一のオプションは同じドメインのプロキシです。

于 2012-12-13T06:37:18.050 に答える
0

@adeneo は質問に答えましたが、コメントで答えました。したがって、私の理解にJSONPは根本的な欠陥がありました。JSONP リクエストが行われる場合、それは XHR リクエストではありません。むしろ、scriptタグを動的に挿入してJSON. そのため、呼び出しは XHR (少なくとも IMO JQuery) のように見えますが、そうではありません。XMLHttpRequest オブジェクトは一切使用されません。

この質問には既に回答があります JSONP とは何ですか? しかし、私はどういうわけか前にそれを逃しました。クロス ドメイン リクエストを説明する別の優れたリソースは、devlogにあります。

私が提起した残りの問題は冗長になります!

于 2013-01-17T14:27:44.927 に答える