http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1045993005
実際にやりたいことは、この質問に近いのですが、Ajaxを使う方法でなくても良いです。
どのようにすればいいでしょうか?いくつかやり方を示していただけるとより嬉しいです。
子ウィンドウをオープンする際に、必要なクエリをURLに付加しておけば様々な値を渡せます。
受け取ったスクリプトで、付加された値を処理し、適切なところへ保存すればよいでしょう。
(未確認ですが、SESSION でもいけるのではないかと)
親ウィンドウ側のスクリプトが、保存された値を読み取るようになっているのが前提ですが、子ウィンドウから親ウィンドウのリロードをさせる事も送信させる事も可能なので。
また、「PHPの変数に渡す」の意味が、PHPへ何らかの値を渡すという事なら、子ウィンドウでの処理が処理が済んだら、親ウィンドウのフィールドに(またはフィールドを新設して)値を入れる事で対応可能でしょう。
ありがとうございます。いろんなやり方があるのですね〜。
一番やりやすいのはAjaxなんでしょうか?引き続き募集しますので、よろしくお願いします。
たぶん、皆さんAjaxの回答をすると思いますので、それ以外の方法で簡単なサンプルを。
JavaScript(HTML)側
<script> function test(str){ var img = document.createElement('img'); img.src = '/test.php?test=' + str; document.body.appendChild(img); } </script> <a href="javascript:test('Hatena!')">click me !</a>
PHP側
<?php header("Location: https://chart.googleapis.com/chart?chst=d_bubble_icon_text_small&chld=info|bb|{$_GET['test']}|FFFFFF|000000");
アクセスカウンタのようなコールバックが必要ないコードなら上記のようなAjaxを使わない方法でも問題ありません。
不要かもしれませんが、一応解説を。
JavaScriptでimg要素を作成し、受け取った引数をsrc属性のURLのパラメータとしてDOM操作でbody要素に追加しています。
そうすると、ブラウザは画像を表示しようとしてサーバにリクエストをするので、サーバのPHPでは$_GETでパラメータを受け取ることができるわけです。(ここでは受け取った文字列を利用してリダイレクトしています)
ただ、コールバック、つまりJavaScript→PHPの後にPHP→JavaScriptでデータを受け取るためには、Ajaxを使うのが無難で簡単です。
ありがとうございます。引き続きAjaxの方法も募集しますので、よろしくお願いします。
失礼ながら、id:asuka645さんが示したページを読んでも理解できないなら諦めた方がいいと思います。おそらくあなたの手には余るのではないかと。その高橋さんのAjax解説はとても分かりやすく、私も以前読んで勉強させていただきました。
一応サンプルを示します。
JavaScript(HTML)側
<script type="text/javascript" src="http://www.google.com/jsapi"></script> <script> google.load('jquery', '1'); function test(str){ $.get("test.php", { test: str }, function(data){ alert(data); } ); } </script> <a href="javascript:test('Hatena')">click me !</a>
PHP側
<?php echo "Hi, {$_GET['test']} !";
一応解説します。
↓jQueryを読み込み。
<script type="text/javascript" src="http://www.google.com/jsapi"></script> <script> google.load('jquery', '1');
↓サーバーにリクエストしている部分
$.get("test.php", { test: str }, function(data){ alert(data); } );
↓この行のtest.phpがPHPファイルのURI
$.get("test.php",
↓この行は、PHPの$_GETに渡す変数です。複数指定する場合は{hoge:'a', fuga:'b'}とか指定してください。
{ test: str },
↓この部分がいわゆるコールバック関数。PHPからの応答が返ってきた時にどのように処理するかを書きます。ここではアラートを出して内容をテキストとして表示しています。
function(data){ alert(data); }
一応PHPの解説もしておきます。
↓JavaScriptからのデータは$_GET['****']で受け取ります。ここでは受け取った文字XXXXに"Hi, XXXX !"と返しています。
<?php echo "Hi, {$_GET['test']} !";
気をつけるのは2点
・日本語を扱う場合はPHP側の文字コードに気をつけて下さい。UTF-8を使うこと。
・非同期通信なので処理の順番に気をつけて下さい、この場合、$.getの結果が帰ってくる前に関数testは実行終了しています。
ありがとうございます!大変良くわかりました。
コメントが書き込めないので、再度解答します。
僕は、こちらのページを参考にしてます。
http://allabout.co.jp/gm/gc/24097/
http://jsgt.org/mt/archives/01/000409.html
jQuery よりはシンプルで軽量でいいんじゃないかと思っています。
ありがとうございます!参考になります〜
すみません、その方法を…