2

私はドメインを持っuser1.mydomain.comています。私はAJAX/JSONを介して自分のWebアプリを処理するためuser2.mydomain.comに使用します。したがって、次のようなjQUeryを使用api.mydomain.comしてPOSTリクエストを作成したいと思います。結果として、JSONでuser1のアクティブなプロジェクトのリストを取得します。メソッドを見つけましたが、サーバーにデータを送信するオプションがなく、GETメソッドだけのようです。私が直面しているもう1つの問題は、同一生成元ポリシーです。では、JSONを別のサブドメインのサーバーにPOSTして、結果としてJSON応答を取得するにはどうすればよいですか?user1.mydomain.comapi.mydomain.com/projects{'action':'getActiveProjects'}$.getJSON

4

3 に答える 3

10

$.ajaxを指定してJSON-Pを使用しますdataType: "jsonp"。リンクされたドキュメントの詳細。サーバーはJSONだけでなくJSON-Pで応答する必要がありますが、サーバーを制御する場合は非常に簡単です。

または、かなり最近のブラウザ(IEではなく)のみをサポートする必要がある場合は、CORSをサポートするようにサーバーを設定できます。ただし、これは最近のブラウザでのみサポートされており、IE8はサポートしていますが、通常のオブジェクトを介して透過的にサポートしていませんXMLHttpRequest。代わりに、XDomainRequestjQueryが自動的に処理しない完全に異なるトランスポートオブジェクト()を必要とします。

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を使用することが不可欠です。そうしないと、信頼できないサーバーを使用している場合、挿入されたコードがページから情報を読み取り、それをサードパーティに送信する可能性があります。あなたの合言葉で注意しましょう。

于 2011-02-24T14:53:32.183 に答える
1

サブドメインは個別のドメインであるため、Ajax/JSONは使用できません。ただし、 JSONPを使用することはできます。jQueryにはこれが組み込まれているため、リクエストで指定するだけで済みます。関連するドキュメントをご覧ください。JSONPでPOSTを使用することはできません(これはこの手法の動作方法によって制限されます)が、クロスブラウザークロスドメインリクエストを実行する他の方法はありません。

于 2011-02-24T14:53:03.127 に答える
1

document.domainをメインドメインに設定します

document.domain = "mydomain.com"

詳細はこちら

于 2013-10-01T09:36:13.570 に答える