クロスドメインJSONPを使ってjqueryのAJAXは、問題を解決します

クロスドメインを使用してjqueryのアヤックスJSONPは、問題が解決する
:記事を参照してくださいhttp://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html
https://www.cnblogs.com/hongyan5682/ P / 5616506.html
クロスドメインとは何
クロスドメインを許可していないセキュリティ上の理由からJavaScriptは、他のページにさらさ呼び出します。しかし、同じセキュリティ制限ではなく、IFRAMEやAjaxアプリケーションに多くのトラブルを注入します。ここでは、クロスドメインに関連するいくつかの問題は、単に整理します:

どのような最初のクロスドメインは、単純に理解することがあるため制限のJavaScriptの同一生成元ポリシー、a.comがJSまたはCA-COM b.comドメイン内のオブジェクトのドメイン名の下で動作することができないということです。より詳細な説明は、表を見ることができます:

通信を許可するかどうかURL
http://www.a.com/a.js
http://www.a.com/b.jsの下で同じドメイン名を許可し
http://www.a.com/lab/a.js
http://www.a.com/script/b.js異なるフォルダは、同じドメイン名の下で許可
http://www.a.com:8000/a.js
http://www.a.com/b.js同じドメイン名が、別のポートを許可していません
http://www.a.com/a.js
https://www.a.com/b.js同じドメイン名は、異なるプロトコルが許可されていません
http://www.a.com/ a.js
http://70.32.92.74/b.jsとドメイン名は、IPは許さ対応
http://www.a.com/a.js
http://script.a.com/b.jsプライマリドメインと同じ、異なるサブドメインが許可されていない
http://www.a.com/a.js
http://a.com/b.js当てはまらない許可されていない(同じドメイン名の下で、異なる第二レベルドメイン(同書)クッキーをアクセス)できるよう
http://www.cnblogs.com/a.js
http://www.a.com/b.js異なるドメイン名が許可されていません
二つの点に特別な注意を:
まず、プロトコルとポート「フロント」に起因するクロスドメインの問題は、無力であれば
第二:クロスドメインの問題では、ドメインは単に「URLの頭」で、同じIPアドレスの判断を特定しようとしませんこれは、2つのフィールドまたは同じIP上の2つのドメインかどうか対応しています。
「一致しなければならないドメイン、プロトコル、およびポート「第一のURLが」+ window.location.host window.location.protocolを指す、と理解することができます 」。
そして、簡単に「最前面」の一般的なクロスドメインのアプローチにまとめ、このソリューションは、ヤフーのこの記事を見ることができます興味を持っている、ここでは背景プロキシ背景設定が説明されていない含まれます。「JavaScriptの:使用してくださいクロスドメインのXMLHttpRequestコールのためのWebプロキシ 」

、WEBAPI:

//書き込まれたクロスドメインのJSONPをテストするための
[HTTPGET]
公共ボイドGETALL(文字列コールバック)
{
リスト retList =新しいリスト ();
コンテキストコンテキスト=新しいコンテキスト();
VARユーザー= context.Users.ToList();
(もし!ユーザー= NULL && users.Count> 0)
{
retList =ユーザー;
}
context.Dispose()。

       //return "callback(" + JsonConvert.SerializeObject(retList) + ")";
       HttpContext.Current.Response.Write(callback + "(" + JsonConvert.SerializeObject(retList) + ")");
       HttpContext.Current.Response.End();
   }

  実験インターフェイスのようにWEBAPIメソッドを持つプロジェクトは、インターフェイスアドレスはhttp:// localhostを:616 / API / UserServiceの/ GETALL、アクセスメソッドがGETします

第二に、テストページ:

test

  テストページには2つのボタンのみ、通常のAJAX呼び出しのWEBAPIインターフェイスのための1つを含み、他のはJSONPコールWEBAPIインタフェースを使用することです。

一般的なAjax呼び出しを使用する場合は、以下の情報を求めるプロンプトが表示されます:

ノーアクセス制御 - 許可 - Orgin、Ajaxの場合は、他のサーバーからデータを取得することはできません。

第三に、クロスドメインJSONPの使用:

JSONP一般原則は、次のような、サーバー上のフロントデスク要求し、クロスドメインスクリプトがクロスドメインに影響されないときということです。従って、同様の効果を達成するAJAX、動的にこれを行う方法JSおよびデータを含む、ニーズJS前端に係るクロスドメインサービスを生成するために必要なだけです。しかし、JSONPアヤックスと本質的に異なる:コアJSONPを動的に動的に生成されたjsのスクリプトサーバを呼び出すためにタグを追加している間、AJAXコアが、このページの非XmlHttpRequestの内容によって得られます。

機能callAPIByJSONP(){
VAR試験= 1。
$アヤックス({
タイプ: "GET"、
非同期:偽、
URL: " のhttp:// localhostを:616 / API / UserServiceの/ GETALL "、
データ型: "JSONP"、
JSONP: "コールバック"、
jsonpCallback: "ハンドラ" 、
成功:関数(結果){
アラート(結果[0] .UserName);
}、
エラー:関数(E){
VARテスト= E;
}
})。
}
注意点:

このような成功のように、コード200、STATUSTEXTのリターンとして、リターンコールバック(コールバックメソッド名)+(データ)が、成功コールバック関数の中に入りますが、にしない:背景のメソッドを開始することは、戻り値を文字列型の値を返します。エラーインチ

その後、インターネットはその理由を見つけるために、多くの答えは、データ形式の問題を返すことですが、フォーマットに従って言うと私は彼らが同じである上に書きました。最終更新背景方法、問題を解決するために、データを返すためにHttpContext.Current.Response.Write方法を使用して。

コードをコピーして
書かれたテストクロスドメインJSONPため//
[HTTPGET]
公共ボイドGETALL(文字列コールバック)
{
リスト retList =新しいリスト ();
コンテキストコンテキスト=新しいコンテキスト();
VARユーザー= context.Users.ToList();
(もし!ユーザー= NULL && users.Count> 0)
{
retList =ユーザー;
}
context.Dispose()。

        //return "callback(" + JsonConvert.SerializeObject(retList) + ")";
        HttpContext.Current.Response.Write(callback + "(" + JsonConvert.SerializeObject(retList) + ")");
        HttpContext.Current.Response.End();
    }

コードのコピー
フロントデスクで取得したデータを:

あまりにもバックグラウンドサービスモードまたはをGETするために「POST」最後のJSONP要求:また、JSONP原理を使用すると、タイプを指定した場合でも、道をGETするJSONPリクエストので、動的に追加されているため、

おすすめ

転載: www.cnblogs.com/ITniu/p/11074517.html