ホームページ >ウェブフロントエンド >jsチュートリアル >JSONP は jQuery AJAX クロスドメインの問題をどのように解決できますか?
jQuery AJAX クロスドメインの問題
提供されたシナリオでは、2 つの PHP ファイル (test.php と testserver.php) が次を使用して通信します。 jQuery の AJAX、クロスドメインの制限は、それらが別のサーバーに存在する場合に発生します。サーバー A は test.php (例: localhost) をホストし、サーバー B は testserver.php (例: Web サーバー) をホストします。
問題:
AJAX リクエストの実行が成功したにもかかわらずファイルが同じサーバー上にある場合、異なるサーバー上にある場合はエラーで失敗します。これは、Same-Origin Policy (SOP) によるものです。
解決策:
このクロスドメインの問題に対処するために、JSONP (JSON with Padding) が採用されています。 JSONP はコールバックを利用してブラウザの制限を回避します。
実装:
jQuery (test.php):
$.ajax({ url: "http://domain.example/path/to/file/testserver.php", dataType: 'jsonp', // Notice! JSONP (lowercase 'P') success: function(json){ // Handle JSON response (an array) alert("Success"); }, error: function(){ alert("Error"); } });
PHP (testserver.php):
<?php $arr = array("element1","element2",array("element31","element32")); $arr['name'] = "response"; $callbackName = $_GET['callback']; // Get the callback name from GET params echo $callbackName."(".json_encode($arr).");"; ?>
説明: