2012-02-06 9 views
2

別のドメインの.NET Webサービスにajax投稿を作成する必要があります。サーバーからの戻りデータをjsonpに設定し、jsを使用してデータを読み取ることはできますか? .NETサービスに投稿するときに、私は、このソリューションに遭遇しました:jQuery AJAX POST via .NET - JSONP Return

http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

$.ajax({ 
    type: "POST", 
    url: "PageName.aspx/MethodName", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
    // Do something interesting here. 
    } 
}); 

私はしかし、私の呼び出しが常に同じドメイン内されている、多くの成功とする前にこれを使用しました。クロスドメインを投稿したいので(これも可能ですか?)、クロスドメインの問題を避けるために返されるデータはjsonpにありますか?私はGETリクエストクロスドメインのは、APIを言わせする作るとき

通常、私は通常、AJAX呼び出しに私のデータ型としてを「スクリプト」を使用して成功AJAX機能の外にコールバック関数を用いてデータを解析。

は、それが上記の呼び出しでデータ型として「スクリプト」を使用することは可能ですか私はこの呼び出しを行うと、まだJSONPは、コールバック関数の内部で読み取ることがと返されたデータを処理することについては行くだろうか?

+2

あなたが呼び出すサーバもJSONPをサポートしている必要があります。それは事実ですか? –

+0

そうすると仮定します。 – spez86

答えて

0

jsonpを使用する場合、urlクエリーストリングパラメータとしてコールバック名を指定する必要があります。これは、データが返されるときにクライアント側で呼び出される関数の名前です。サーバー側では、あなたがこのような何か実行する必要があります。詳細情報については

if request.GET.has_key('callback'): 
    callbackName=request.GET['callback'] 
    str="%s(%s)"%(callbackName,str) 
return HttpResponse(str, mimetype='application/javascript') 

http://api.jquery.com/jQuery.ajax/を読み、ページ上でJSONPを検索します。

p.s:明らかに私のスニペットはPythonで書かれていますが、それは同じ原則です。

+0

ありがとう、そんなに意味があります。しかし、私は、ActallAjaxコールをどのようにセットアップするか、それが呼び出されるときにどのようなdataTypeを宣言するべきかについてもっと興味があります。 – spez86

+0

dataTypeはjsonpである必要があります。 – Sid

+0

ここに例があります:http://stackoverflow.com/questions/2067472/please-explain-jsonp 8アップヴォートの答えを見てください – Sid

0

返信データのデータ形式は、サーバ側のAPIで決まります。いくつかのAPIはjsonp形式を提供します。 APIのドキュメントを探します。あなたがAPIを所有していない限り、呼び出しを行っているクライアント側ではアクセス権がありません。

0

JSONPはAJAXではありません。

AJAXは、XHRのターゲットがXHRを開始するページと同じ起点であるという制限の下で、ブラウザのXHRインターフェイスを使用して別のHTTP要求を行います。

JSONPは、標準となったハックです。 JSONPは、同等の...返されたファイルが本当に好きに見えるだけjavascriptのです <script src="http://api.yoursite.com/whatever/call.json?callback=asdf

...です この非常に重要なポイントに到達するためにすべてですasdf({ ... json data ... });

ますクロスドメインのAJAX POSTやJSONPでPOSTを実行することはできません。どうして? JSONPは<script>タグに基づいているため、GETのみです。

これにはいくつかの迂回技術がありますが、最も簡単なのはおそらく、ローカルドメインのサーバー側にAPIリクエストを送信するサーバーのページをセットアップし、 。