質問: "test.phpのある場所" $.ajax({ url: url, type: "POST", data: {"item": "こんにちは"}, success: function(html) { console.log(html); }, error: function(err) { console.log("エラーです"); } }); ``` ### サーバ側のPHP ``` //test.php ``` ### 実行方法 サーバ側でtest.phpをFirefoxで開く。→「かきくけこ」とだけ表示される。(JavaScriptで代入した「こんにちは」が表示されない) ### 補足 PHP5.6 参考サイト
回答: > > サーバ側でtest.phpをFirefoxで開く。 > > →「かきくけこ」とだけ表示される。(JavaScriptで代入した「こんにちは」が表示されない) > > > これは以下の手順でしょうか? * 1. test.jsのページをFireFoxで開いてAjax通信を実行 * 2. 通信終了後、Firefox上部のURL欄をtest.phpのURLに変更して移動 * 3. `かきくけこ`しか表示されない これは通常の挙動になります。 どういう事かというと、 test.js内で送信したAjax通信に盛り込まれたPOSTデータは、その時限りの通信で利用されます。 したがってAjax通信の`console.log(html);`の箇所では`こんにちはかきくけこ`になっているはずで、 その後にFirefoxで開いたときはPOSTデータを何も指定していませんので、`かきくけこ`のみを取得出来るはずです。 基本的にFirefoxを始めとしたブラウザはBrowse(拾い読みする)事を実現するためのツールです。 従って、基本的に行う事はWebサイトの情報をダウンロードして閲覧するためにGETリクエストを投げる事であって、 POSTはフォーム画面に入力して実行するような特殊なケースでしか利用されません。 なのでブラウザでPOST通信の挙動を確かめるというのは中々難しいのです。 Firefoxに搭載されているデベロッパーツールの使い方をもっと深く知る事で、 Ajax通信時に具体的に何をやっているのかを詳しくチェック出来るようになります。 調べてみてください。 他にもPOST通信を行うツールというのは沢山ありますので、 そういうソフトを利用しても良いかもしれませんね。 Firefoxではありませんが、Chromeの拡張機能を見つけましたので載せておきます。 ブラウザから手軽にHTTPリクエストを送信するChrome拡張『Advanced REST client』 > > PHPでこんにちはも表示したいのですが > > > これをどういう意味で発言しているのかによります。 * FirefoxでPOST通信を再現して`こんにちはかきくけこ`と表示されることを確認したい * Ajax通信終了後、test.phpへ移動したブラウザに`こんちにはかきくけこ`を表示させたい 前者は上記の章で解説しているので割愛しますが、問題は後者です。 これは難易度が一気に上がります。 軽く解説 PHPは通信毎にプログラムが完全に分離されており、通信発生毎にPHPというソフトウェアが立ち上がり通信を解析して結果を返す作りになっています。 (実際にはApacheというPHPの裏で動いているWebサーバソフトが、予めPHPのソフトウェアを並列で4〜8台起動して準備して待っている作りなので高速に動作しているように見えますけどね) 従ってAjax通信とブラウザで開いたときは変数の値等が全てクリアされてしまっているので、 以下のような手法で情報を次に引き継ぐ必要があります。 * セッションを利用してAjaxで受け取ったPOST文字列を保存する * MySQL等のデータベースを立ち上げて、Ajaxで受け取ったPOST文字列を保存する セッションを利用する際はAさんのFirefoxなら情報が受け継がれますが、BさんのFirefoxやAさんのChromeには情報が引き継がれません。 一般的にブログや掲示板、SNS等のシステムでは MySQL等のデータベースを使ってこのAjax通信時のPOST文字列を保存する事が一般的ですが、 これはかなり大掛かりかつ難易度の高い実装となります。 この解答欄で解説仕切ることは無理なので、書店へ出向いてPHP+MySQLでブログシステムを作るような書籍を立ち読みしてみてください。