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

coldplay.xixi
リリース: 2023-04-09 12:44:02
転載
2472 人が閲覧しました

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 サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:jb51.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート