ホームページ >バックエンド開発 >PHPチュートリアル >Ajax クロスドメインの問題の PHP 分析
実際、JSONP についてはインターネット上にたくさんの説明がありますが、どれも同じで曖昧です。初めての人にとっては少し理解しにくいので、試してみてください。この問題を自分なりの方法で説明してみてください。この記事では主に、Ajax クロスドメインの問題に関する PHP の分析を紹介し、皆様のお役に立てれば幸いです。
1. よく知られている問題は、静的ページ、動的 Web ページ、Web サービス、または WCF である限り、通常のファイルに対する直接の Ajax リクエストにはクロスドメインの不正アクセスの問題があります。はクロスドメインリクエストであるため、許可されません
2. ただし、Web ページ上で js ファイルを呼び出す場合、それがクロスドメインかどうかの影響を受けないこともわかりました (それだけでなく、 3f1c4e4b6b16bbbd69b2ee476dc4f83a、a1f02c36ba31691bcfe87b2722de723b、d5ba1642137c3f32f4f4493ae923989c など、「src」属性を持つすべてのタグがクロスドメイン機能を持っていることがわかりました
3。純粋な Web 側を介してクロスドメインにアクセスしたい場合 (ActiveX コントロール、サーバー プロキシ、将来の HTML5 の Websocket などは含まれません) データの可能性は 1 つだけあり、それはデータを JS 形式にロードすることです。
4. 複雑なデータを簡潔に記述することができる、JSON と呼ばれる純粋な文字データ形式があることは、すでにわかっています。さらに良いのは、JSON もネイティブでサポートされていることです。
5. このようにして、ソリューションは準備が整い、Web クライアントはそれを呼び出すことができます。スクリプトは、動的に生成された js フォーマットを呼び出すのにまったく同じメソッドを使用します。クロスドメイン サーバー上のファイル (通常は接尾辞として JSON が付いています) サーバーが JSON ファイルを動的に生成する理由は、クライアントが必要とするデータをロードするためであることは明らかです。
6. クライアントが JSON ファイルの呼び出しに成功したら、残りは必要に応じてデータを処理して表示します。しかし、それは AJAX と非常によく似ています。同じ。
7. クライアントがデータを使用しやすくするために、JSONP と呼ばれる非公式の送信プロトコルが徐々に形成されてきました。このプロトコルの重要な点の 1 つは、ユーザーがサーバーにコールバック パラメーターを渡せるようにすることです。サーバーはデータを返します。このコールバック パラメータは JSON データをラップする関数名として使用されるため、クライアントは返されたデータを自動的に処理するように独自の関数をカスタマイズできます。
フロントエンドコードの元の ajax は
$.ajax({ type: "get", async: false, url: "url", dataType: "json", success: function(json){ alert('success'); }, error: function(){ alert('fail'); } });
であり、
$.ajax({ type: "get", async: false, url: "url", dataType: "jsonp", jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback) jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据 success: function(json){ alert('success'); }, error: function(){ alert('fail'); } });
json 形式と jsonp 形式の違いを比較してください
{ "message":"获取成功", "state":"1", "result":{"name":"工作组1","id":1,"description":"11"} }
jソンプ形式:
URL では、バックグラウンドに渡されるコールバックのパラメーターが Shenma であることがわかります。それで、あなたはそれに対処する方法を知っています。したがって、背景コードを変更します。
そのため、php の元の echo json_encode($xxx) を
callback({ "message":"获取成功", "state":"1", "result":{"name":"工作组1","id":1,"description":"11"} })に変更する必要があります関連する推奨事項: Ajax クロスドメイン ソリューションの最も包括的なソリューション
JS は Ajax クロスドメインリクエストフラスコレスポンスコンテンツを実装します
以上がAjax クロスドメインの問題の PHP 分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。