ホームページ  >  記事  >  php教程  >  Ajax クロスドメインが PHP プログラムにデータをポストするとき、PHP プログラムは常に 2 回実行されます。

Ajax クロスドメインが PHP プログラムにデータをポストするとき、PHP プログラムは常に 2 回実行されます。

WBOY
WBOYオリジナル
2016-08-08 08:49:47949ブラウズ

php プログラムは IIS7 にデプロイされます。ajax 経由でデータを送信すると、2 つの問題が発生します。1 つは、php プログラムが常に 2 回実行されることです。

最初の問題に対する解決策は、次のコード行を追加するだけです。

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

header("Access-Control-Allow-Headers: x-requested-with,content-type");

header('アクセス制御の許可メソッド: OPTIONS,POST,GET');

実際には、コードを追加せずに IIS で直接設定することもできます。サイトを直接選択し、右側の http 応答ヘッダーをクリックして、その中で直接設定するだけです。写真に示すように:

2番目の質問については、Baiduからの結果がなかったので、FQしてGoogleを使用する必要がありました。すぐに理解でき、手がかりをたどって、最終的に理解できました。

CORS .net クロスドメイン ソリューションでは、次のように紹介されています (http://jingyan.baidu.com/article/03b2f78c190ad25ea237ae33.html)

同じリクエストには、同じリクエスト アドレスを持つ 2 つのメソッドが必要です。1 つは「POST」とマークされ、もう 1 つは「OPTIONS」とマークされたメソッドです。ここでの「OPTIONS」メソッドは論理的な処理を行う必要はありません。オペレーションと戻り値は void です (実際、OPTIONS リクエストはブラウザの検証です。パラメータ付きの POST リクエストを送信する場合、ブラウザはまず OPTIONS リクエストを送信し、リクエスト ヘッダー情報とレスポンス ヘッダー情報が正しく設定されていることを確認します)実際に POST リクエストを開始する前に一貫性を保つ必要があります)

パケット キャプチャにより、ブラウザが OPTIONS service/service.php HTTP/1.1 と POST /service/service.php HTTP/1.1 の 2 つのリクエストを生成したことがわかりました。

記事にあるようにOPTIONSリクエスト時に直接voidを返したかったのですが、PHPの設定を見ると直接アクションを制限することができます。試してみたところ、ajax はクロスドメインになり、php プログラムは 1 回だけ実行されました。

IIS での設定方法は次のとおりです。PHP プログラム サイトを見つけて、サーバー設定を選択することもできます。右側のハンドラー マッピングをクリックして PHP を見つけ、[編集] をクリックし、ポップアップ ダイアログ ボックスで [要求制限] をクリックして、述語を選択し、以下の述語のいずれかをクリックし、プロンプトに従って GET と POST を入力します。以前はデフォルトのオプション (すべての述語) を使用していたので、この問題が発生しました。 写真に示すように:

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