5

クロスドメインPOSTリクエストを実行しようとしていますが、壁にぶつかりました(または2つ)。

サーバーにプロキシページを配置できません。そのため、これはオプションではありません。

私はgetJSONを調査しました。これは、GETではなくPOSTする必要があることを除けばうまく機能します。

これを行うことは可能ですか?そうでない場合は、誰かがgetJSONのしくみと、POSTの代替を作成できない理由を説明してもらえますか。

4

3 に答える 3

26

XMLHttpRequest (別名 AJAX) を使用してクロスドメイン要求 (GET / POST / など) を作成することはできません。

サーバーがサポートしている場合にできることは、JSONP リクエストを作成することです。JSONP リクエストは次のように機能します。

  • jQuery は、引数として指定したコールバック関数からグローバルにアクセス可能な関数を作成します
  • XMLHttpRequest (AJAX) を使用して HTTP 要求を行う代わりに、jQuery は動的に SCRIPT タグを DOM に挿入します。
  • script タグの SRC は、通信しようとしている要求 URL です。
  • jQuery は次のようにコールバック パラメータをクエリ文字列に追加します: example.com/someurl.js?callback=someDynamicallyGeneratedMethodName
  • その後、JSON の結果を引数として someDynamicallyGeneratedMethodName に渡すことでクライアントが使用できる JavaScript を返すのは、SERVER 次第です。

投稿先のサーバーを制御できない場合は運が悪く、JSONP はあまり役に立ちません。サーバーが返すものは何でも SCRIPT タグにあり、正しくフォーマットされていないとエラーをスローする可能性が高くなります。

詳細については、ショートカットではなくベースの $.ajax 関数を参照することをお勧めします。(Ajaxの下のjQueryドキュメント。申し訳ありませんが、これ以上リンクを投稿できません)

繰り返しになりますが、投稿先のサーバーを制御できない場合は、可能であればプロキシを調べることをお勧めします。それ以外の場合は、IFRAME が唯一の選択肢になる可能性があります。SWF (flash) オブジェクトを使用してこれを実現する方法もあります。私はどちらも試していませんが、XMLHttpRequest オブジェクトの制限に対する回避策です。

私が助けてくれることを願っています!

于 2009-10-16T18:09:39.420 に答える
2

投稿はできますが、クロスドメインの問題を回避するための JSONP リクエストが必要です。基本的に、コールバック関数を提供すると、リクエストがスクリプト コンテンツとして返され、リクエストからの JSON データでコールバックが呼び出されます。サーバー側のスクリプトは、JSON オブジェクトにラップされたコールバック関数を使用して、関数呼び出しとしてデータを返す必要があります。

post関数のドキュメントを参照してください。

$.post( '/example.com/controller/action?callback=?',
        { param: "data" }, 
        function(data) {
             ...do something with the data...
        }, 'jsonp' );

このための ASP.NET MVC アクション:

[AcceptVerbs( HttpVerbs.Post )]
public ActionResult Action( string param, string callback )
{
     var jsonData = ...do something and construct some data in JSON...

     return Content( callback + "(" + jsonData + ");" );
}
于 2009-10-16T02:06:16.400 に答える
0

クロス ドメイン POST を実行する場合、最も簡単な解決策は、ここで Matteo が提供するものです。それは私にとってうまくいきました

于 2012-07-08T08:48:28.493 に答える