私はドメインを持っuser1.mydomain.com
ています。私はAJAX/JSONを介して自分のWebアプリを処理するためuser2.mydomain.com
に使用します。したがって、次のようなjQUeryを使用api.mydomain.com
してPOSTリクエストを作成したいと思います。結果として、JSONでuser1のアクティブなプロジェクトのリストを取得します。メソッドを見つけましたが、サーバーにデータを送信するオプションがなく、GETメソッドだけのようです。私が直面しているもう1つの問題は、同一生成元ポリシーです。では、JSONを別のサブドメインのサーバーにPOSTして、結果としてJSON応答を取得するにはどうすればよいですか?user1.mydomain.com
api.mydomain.com/projects
{'action':'getActiveProjects'}
$.getJSON
3 に答える
$.ajax
を指定してJSON-Pを使用しますdataType: "jsonp"
。リンクされたドキュメントの詳細。サーバーはJSONだけでなくJSON-Pで応答する必要がありますが、サーバーを制御する場合は非常に簡単です。
または、かなり最近のブラウザ(IEではなく)のみをサポートする必要がある場合は、CORSをサポートするようにサーバーを設定できます。ただし、これは最近のブラウザでのみサポートされており、IE8はサポートしていますが、通常のオブジェクトを介して透過的にサポートしていませんXMLHttpRequest
。代わりに、XDomainRequest
jQueryが自動的に処理しない完全に異なるトランスポートオブジェクト()を必要とします。
jQueryを使用したJSON-Pの例を次に示します。
$.ajax({
// The source URL
url: "http://jsbin.com/ubucu4",
// Tell jQuery you're doing JSON-P
dataType: "jsonp",
// Include some data with the request if you like;
// this example doesn't actually *use* the data
data: {some: "data"},
// You can control the name of the callback, but
// usually you don't want to and jQuery will handle
// it for you. I have to here because I'm doing this
// example on JSBin.
jsonpCallback: "exampleCallback",
// Success callback
success: function(data) {
display("Received data, typeof data = " + typeof data);
display("data.foo = " + data.foo);
display("data.bar = " + data.bar);
},
// Error callback
error: function(jxhr, status, err) {
display("Error, status = " + status + ", err = " + err);
}
});
callback
サーバー上で、jQueryがURLにパラメーターを追加したことがわかります。たとえば、上記のようになりますhttp://jsbin.com/ubucu4?callback=exampleCallback
が、jQueryコントロールが好きな場合は、名前が少しエキゾチックになります。サーバー側のコードは、JavaScript関数呼び出しである応答を作成し、その関数を呼び出す必要があります。上記の例での私の応答は次のとおりです。
exampleCallback({
"foo": "This is foo",
"bar": "This is bar"
});
これはすべて、同一生成元ポリシーXMLHttpRequest
の対象となるを使用する代わりに、JSON-Pが動的に追加されたタグを使用するために発生します(これは問題ありません)。私の例では、タグは次のようになりますscript
<script type='text/javascript' src='http://jsbin.com/ubucu4?callback=exampleCallback'></script>
ブラウザは、JSON-P応答であるスクリプトを取得して実行します。つまり、コールバックが呼び出され、データがスクリプトに提供されます。
JSON-P応答は、技術的にはJSONではありません。これはJavaScriptであり、そのため、ページに直接コードを挿入するため、信頼できるサーバー(独自のサブドメインサーバーなど)でのみJSON-Pを使用することが不可欠です。そうしないと、信頼できないサーバーを使用している場合、挿入されたコードがページから情報を読み取り、それをサードパーティに送信する可能性があります。あなたの合言葉で注意しましょう。