今回は、Ajax クロスドメインの実装方法について説明します。Ajax クロスドメイン実装の 注意点 について、実際の事例を見てみましょう。
AJAXとは「Asynchronous Javascript And XML」(Asynchronous JavaScript and XML)の略で、インタラクティブなWebアプリケーションを作成するためのWeb開発技術を指します。
AJAX = 非同期 JavaScript および XML (標準ユニバーサル マークアップ言語のサブセット)。
AJAX は、高速で動的な Web ページを作成するためのテクノロジーです。
AJAX を使用すると、バックグラウンドでサーバーと少量のデータを交換することで、Web ページを非同期に更新できます。これは、ページ全体を再読み込みしなくても、Web ページの一部を更新できることを意味します。
従来の Web ページ (AJAX を使用しない) では、コンテンツを更新する必要がある場合、Web ページ全体をリロードする必要があります。
本題に入りましょう
2 日前、xz さんから、ajax でクロスドメイン呼び出しを実装する方法を知っているかと尋ねられました。私はこの概念について聞いたことがなかったので、実装方法も知っていました。 xz さんは、Ajax クロスドメインを呼び出す方法はいくつかあると述べました。1 つは document.domain を設定することで実現される iframe メソッドで、もう 1 つは jsonp を設定することで実現されます。過去 2 日間で情報を確認し、いくつかのデモを作成したので、以下にメモします。
ローカルに 3 つのサイトを構築し、クロスサブドメインとクロスドメインをシミュレートするホスト ファイルを設定しました
coolkissbh.com
blog.coolkissbh.com
coolkiss.com
1. Ajax クロスドメイン呼び出し問題はありますか?
coolkissbh.comはjqueryの$.getを使用してblog.coolkissbh.comページを呼び出します
クロスドメインリクエスト、IE 7および8はアクセス拒否エラーを報告します
IE 6.0はこれをポップアップしますこのページは、その管理下にない情報にアクセスしています。これはセキュリティ上のリスクを引き起こします。続行しますか?
2. Ajax クロスドメイン実装方法
1. サブドメイン全体で ajax を実装する
要件: blog.coolkissbh.com の下のページを非同期にリクエストするために Coolkissbh.com のページを実装する実装方法: iframe を使用する、AjaxProxy.aspx などの iframe.com の src 属性を設定して blog.coolkissbh を埋め込むと、ページが Ajax をリクエストします AjaxProxy リクエストが完了すると、返されたデータが Coolkissbh のメイン ページに送り返されます。 com を親オブジェクト経由で実行します。したがって、実際の非同期リクエストは依然として blog.coolkissbh.com のドメイン名で発生します注: このメソッドを通じて実装されたクロスサブドメイン Ajax リクエストは、coolkissbh.com と AjaxProxy.aspx のリクエスト ページで同じ設定を設定する必要があります。ページ ドメイン名、つまりdocument.domain = "coolkissbh.com";
違法なドキュメントを表示します。ドメイン値" コード: "1009 エラー。そのため、返されたデータを処理するためにドメイン全体で 2 番目のメソッドのみを使用できます。
2. ドメイン全体に ajax を実装します
要件: Coolkiss.com 配下のページを非同期でリクエストするために、coolkissbh.com のページを実装します
実装方法: 前述したように、クロスドメインは、ドメイン方式。ただし、script タグを使用して、coolkiss.com ドメイン名のページに script タグの src 属性を設定し、そのページにコールバック関数を渡すことで実現できます。例:RequestAjax_CrossSite = function() { var obj = $("#crossSitePage"); obj.attr("src", "http://coolkiss.com/CrossSite.aspx?callback=handleData3"); } handleData3 = function(data) { $("#ResponseData").html(data); }
CrossSite.aspx は、string を返し、返されたデータをコールバックに渡し、コールバック関数を実行して、Ajax を実装します。例:
Response.Clear();
Response.Write(string.Format (" {0}('{1}')", Request["callback"], responseData));
Response.End();
注: このメソッドは、サブドメイン間の Ajax 問題に対処するためにも使用できます。 , ただし、jquery のように ajax 呼び出しのさまざまなステータスを取得することはできません
3. クロスドメイン ajax は、実際には、2 番目のメソッドと同じです。
jquery 1.2 は、クロスドメイン ajax 呼び出し、つまり $.getJSON 関数のサポートを追加しました
呼び出し方法は次のとおりです:
以下は、coolkissbh.com
//使用jsonp实现跨全域 RequestAjax_JSONP = function() { var obj = $("#crossSitePage"); $.getJSON("http://coolkiss.com/CrossSite.aspx?callback=?&t=" + Math.random(), function(data) { //alert(data); $("#ResponseData").html(data.content); }); }
coolkiss のページです。 .com バックグラウンド処理コード、コールバックに json オブジェクトを渡します:
public partial class CrossSite : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { LoadData_JSONP(); } } protected void LoadData_JSONP() { string responseData = "{content:\"hello world from coolkiss.com\"}"; if (Request["callback"] != null && !string.IsNullOrEmpty(Request["callback"])) { Response.Clear(); Response.Write(string.Format("{0}({1})", Request["callback"], responseData)); Response.End(); } } }
callback =?自動的に function(data) 関数に置き換えられます。
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨読書:
JSONP による Ajax クロスドメイン アクセスの処理方法
Ajax+Session が失敗した直後にログイン ページにリダイレクトする
以上がAjaxクロスドメイン実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。