JavascriptからPHPに変数を渡すには?

羽田から福岡に飛ぶ飛行機の前後で「如何にして Javascriptから PHPに変数を渡すことができるか?」について考察しました

この逆は簡単にできますし、実際の Web programmingの場面でも時々使用します しかし、それとは逆方向となるとこれが難しいのです というよりも少なくとも汎用的にはこれは不可能です

その理由というのは、Javascriptは Server側で動作する node.jsのような javascriptを別とすれば、基本的には Browser上で動作する クライアント側の言語および環境なのです

これに対して PHPは完全に Server側で動作する言語なのです ですから、基本的にはクライアンとらサーバーへのデータ伝達形式である、POSTやGETあるいはCookieを用いねば情報伝達ができません それは securityの観点からも当然のことなのです

たとえば、Javascript側で <div id=”some”></div>のようにして このidに対してdocument.wirte()を用いて書き込む、それをPHP側で読み取ることは無理をすれば可能でしょう しかし、それとしても PHPを動作させねばなりません

これらの理由で Javascript -> PHPは不可能なのです

ついに実現しました

本日はCVIT九州沖縄地方会でのサテライトに呼ばれています ここ10年間近く毎年この夏には呼んで頂いています まあ年の功でしょうか?

でも同じ会において毎年呼んで頂いて毎年何らかの話をする、というのは結構辛いものがあるのですよ 毎年何かしら新しい視点を提言させねばならないのです

という訳で暫くしたらば羽田空港から福岡に飛びます

この二日間悩んでしたプログラムが解決しました Ajax通信を用いてページ遷移無く、列名ボタンに応じてクリックする度に、自動的に並び替える、という良くあるインターフェースの実現なのです

久しぶりに jQueryを用いた Ajax通信プログラムを書いたので、昔のことは完璧に忘れており、調べなおしたり大変でした しかし、苦労は報われる、まるでここ数日間の日本選手による金メダル獲得のようです

結局何が悪かったか ことは簡単でした 動的に<Table><th></th><tr><td>・・・</td></tr></table>を生成しているのですが、この中で当然のことながらボタンも生成します しかし、どうしてもそのボタンをクリックしても、click eventが発生していないのです

これには随分と苦しみました jQueryの APIである .live()は既に廃棄されているようであり、現在では .on()に取って代わったとのことです それで .on()を用いて動的生成後にevent handlerをつけてみたりしたのですがどうしてもうまく行きません

ふと気が付き、これまでは

$data.= '<form action="***.php" method="post">';
$data.='<td>';
$data.='<button type="button" name="**">Name</button>';
$data.='</td></form>';

としていたのを

$data.='<td>';
$data.= '<form action="***.php" method="post">';
$data.='<button type="button" name="**">Name</button>';
$data.='</form>';
$data.='</td>';

のようにしたのです 要するに <form></form>要素を <td></td>要素の中に入れたのです 今までこんなこと関係ないだろうと思っていたのですが、それが大間違いでした こうすることにより無事 event handlerもそのまま継続され、思うどおりの動作をするようになりました