ホームページ  >  記事  >  バックエンド開発  >  PHP による Ajax リクエストの処理と Ajax クロスドメインの問題の詳細な説明

PHP による Ajax リクエストの処理と Ajax クロスドメインの問題の詳細な説明

墨辰丷
墨辰丷オリジナル
2018-05-25 15:02:371343ブラウズ

この記事では、PHP による Ajax リクエストの処理と Ajax クロスドメインの問題に関する関連情報を主に紹介します。非常に優れており、必要な方は参考にしてください

PHP が Ajax リクエストであるかどうかを判断します。

Ajax リクエストを送信するとき、jquery フレームワークで $.ajax、$.get、または $.post メソッドを通じて Web コンテンツをリクエストするときに、XMLHttpRequest オブジェクトを通じてカスタム ヘッダー情報を作成できることはわかっています。 HTTP_X_REQUESTED_WITH パラメータがサーバーに渡されます。PHP ではヘッダーレベルで ajax リクエストであるかどうかが判断され、対応する基準は $_SERVER['HTTP_X_REQUESTED_WITH']判断。一般情况下$_SERVER['HTTP_X_REQUESTED_WITH']默认是XMLHttpRequest,$_SERVER['HTTP_X_REQUESTED_WITH']也可以自定义创建的,使用XMLHttpRequest.setRequestHeader(name,value) です。

例: フロントエンド ページは、通常の Ajax リクエストをバックエンドの test.php に送信します。

$.ajax({
  type: "GET",
  url: 'test.php',
  success: function(data) {
    console.log(data);
  }
});

サーバー test.php は、リクエストが Ajax 非同期リクエストであるかどうかを判断し、ビジネス ニーズに応じて応答します。

以下は、サーバー test.php が Ajax リクエストであるかどうかを単純に検証するコードです:

function isAjax() {
  return @$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ? true : false;
}
if (isAjax()) {
  echo 'Ajax Request Success.';
} else {
  echo 'No.';
}

Ajax は JSONP クロスドメインリクエストを開始します

クロスドメイン Ajax リクエストを実装できますjQuery の JSONP メソッドを通じて、サーバー側の PHP も対応する処理を実行する必要があります。つまり、PHP 側はフロントエンド ページで特定の形式でデータを要求し、返す必要があります。

例: フロントエンド ページが JSONP リクエストを開始します:

$.ajax({
  type: "get",
  data: "random="+Math.random(),
  url: "http://demo.jb51.net/phpajax/jsonp.php",
  dataType: "jsonp",
  jsonp: "callback",
  success: function(data) {
   console.log(data);
  },
  error: function() {
   console.log('Request Error.');
  }
});

ajax リクエスト パラメータに dataType: "jsonp" および jsonp: "callback" が含まれていることがわかります。これは、リクエストしたい内容を示していますは jsonp であり、コールバック callback が返されます。もちろん、jsonpCallback:"success_jsonpCallback" などのコールバック関数をカスタマイズすることもできます

次のように単純に記述することもできます:

jQuery.getJSON('http://demo.jb51.net/phpajax/jsonp.php?callback=?",{
 random: Math.random()
}, function(data){
 console.log(data);
});

PHP バックエンド サービス コードは次のように記述できます (出力 return):

$data = array(
  'rand' => $_GET['random'],
  'msg' => 'Success'
);
echo $_GET['callback'].'('.json_encode($data).')';

Ajax クロスドメイン リクエスト: CORS

CORS、クロスドメイン リソース共有とも呼ばれ、完全な英語名は Cross-Origin Resource Sharing です。 Ajax を使用して a.com のページから b.com のページにデータをリクエストするとします。通常、同一生成元ポリシーにより、この種のリクエストは許可されず、ブラウザーも「」を返します。ソース不一致」エラー。そのため「クロスドメイン」という用語が使われています。ただし、b.com のページのヘッダー情報にコード行を追加することもできます。

header("Access-Control-Allow-Origin: *");

設定したヘッダーが上記の情報である場合、サーバー側で応答が返されたら、デバッグ ツールでそのヘッダー情報の設定を確認できます。赤いボックス内の情報の 1 つが「*Access-Control-Allow-Origin: *」です。 CORS を有効にしている場合、特定のドメイン名に対するリクエストは次のようになります:

header("Access-Control-Allow-Origin: http://www.jb51.net");

例: CORS を介したクロスドメインリクエストデータ

$.ajax({
  type: "get",
  data: "random="+Math.random(),
  url: "http://demo.jb51.net/phpajax/ajax.php",
  dataType: "json",
  success: function(data) {
    console.log(data);
    $("#result_3").html(data.msg+':'+data.rand);
  },
  error: function() {
   $("#result_3").html('Request Error.');
  }
});

このコードをajax.php を別の Web サイトのドメイン名の下に追加します:

header("Access-Control-Allow-Origin: http://www.jb51.net");
$data = array(
  'rand' => $_GET['random'],
  'msg' => 'Success'
);
echo json_encode($data);

これにより、www.jb51.net ページからドメイン名パスデモ.jb51.net/phpajax/ajax へのクロスドメイン非同期リクエストを開始できるようになります。 phpを実行するとレスポンスが得られます。

以上がこの記事の全内容です、皆様の学習のお役に立てれば幸いです。


関連する推奨事項:

vue で proxyTable パラメーターを設定する方法クロスドメイン

AJAX を実装するためのサーバー側の構成クロスドメインRequest

ajaxの解決策クロスドメインデータ Cookie の紛失問題

以上がPHP による Ajax リクエストの処理と Ajax クロスドメインの問題の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。