ホームページ >バックエンド開発 >PHPチュートリアル >Ajax リクエストを処理する PHP の問題と Ajax クロスドメインの問題を解決する

Ajax リクエストを処理する PHP の問題と Ajax クロスドメインの問題を解決する

coldplay.xixi
coldplay.xixi転載
2020-08-05 16:52:232520ブラウズ

Ajax リクエストを処理する PHP の問題と Ajax クロスドメインの問題を解決する

#PHP は、Ajax リクエストであるかどうかを判断します

Ajax リクエストを送信するときは、XMLHttpRequest オブジェクトを通じてカスタム ヘッダー情報を作成できます。jquery フレームワークでは、$.ajax、$.get、または $.post メソッドを通じて Web コンテンツをリクエストすると、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) を使用してカスタマイズすることもできます。 )

関連する学習の推奨事項:

php プログラミング (ビデオ)

例: フロントエンド ページは、通常の Ajax リクエストをバックエンド テスト.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 クロスドメイン リクエストを開始します

jQuery の JSONP メソッドを通じてクロスドメイン Ajax リクエストを実装できます。サーバー側の 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 バックエンド サービス コードは次のように記述できます。これ (出力戻りの形式に注意してください) :

$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: *");

設定したヘッダーが上記の情報である場合、任意のリクエストを b.com で処理できます。サーバー側のメッセージが来て応答すると、デバッグ ツールでそのヘッダー情報の設定が確認できます。赤枠内の情報の 1 つが「*Access-Control-Allow-Origin: *」です。特定のドメイン名に対するリクエストのみを制限したい場合は、次のようになります:

header("Access-Control-Allow-Origin: https://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.');
  }
});

このコードを別の Web サイトのドメイン名の下にある ajax.php:

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

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

関連ビデオの推奨事項:

PHP プログラミングの入門から習熟まで

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

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。