- ベストアンサー
javascriptからphpへ変数
phpでアクセス解析を作ろうと考えているのですが、javascriptからphpへ変数がいまいちわかりません・・ 具体的には画面の横・縦の変数を渡したいです。 postやget以外の渡す方法ってないんでしょうか? 外部ファイルとして解析用.phpを読み込みたいのですが、postやgetの場合、submitした後ページを移動してしまいます。 全てのページに設置したいと思っています。 初心者なので全くわかりません・・ 解答宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 Ajaxという方法を使えば、画面遷移を起こさずにpostすることが可能です。 ただ、見る人が見ればどっちにしろ何をしてるかなんてわかってしまいます。 下のサンプルを参考にしてください。 access.jsを読み込むと非同期でaccess.phpに値をpostします。 ==== HTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>javascriptからphpへ変数</title> <script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript">google.load('jquery','1');</script> <script type="text/javascript" src="./access.js"></script> <style type="text/css"> </style> </head> <body> </body> </html> ==== access.js $().ready ( function() { $.post ( './access.php', { w : screen.width, h : screen.height } ); });
その他の回答 (3)
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 そのままPOSTすれば良いような気がしますが文字化けというのはどのような表示になっていますか? 受け取り側のPHPでurldecodeしてあげれば日本語の文字列に戻ると思います。 先の回答の送信パラメータにアクセス解析で必要な値を設定してあげればクライアントからしか取得できないデータをサーバ側で取得することが出来ます。 もちろんパラメータに乗ってきたq=%E3%81%AC%E3%82%8B%E3%81%BDもきちんと日本語で取得できました。
お礼
$.post ('./access.php',{ w : screen.width, h : screen.height,r:decodeURI(word)}); これでポストして、urldecode($_POST[r])で取り出すと、「・蒔霑」というのに文字化けしました(´Д`)
補足
自作という言葉の場合、「閾ェ菴・」というのに文字化けします・・・ var refe=document.referrer; var pos=refe.indexOf("&q=")+3; var pos1=refe.indexOf("&",pos); var word=refe.substring(pos,pos1); $(document).ready ( function() { $.post ('./access.php',{ w : screen.width, h : screen.height,r:word}); }); こんな感じでワードだけを抜き出してポストして、 urldecode($_POST[r]) でデコード?してるのですが、これではダメなのでしょうか・・?
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 >jqueryに書かれていることって基本、javascriptで自分で実現できるものなんですか? >jQuery.post() 関数など・・ JavaScriptのいろいろな機能を簡単に使えるように実現してくれているのがjQueryですのでjQueryを利用しなくても同じようなことは実現できます。 最後にサンプルを記載しますが、jQueryを併用すれば数行で済むものがちょっと面倒な記述が必要になります。 (ブラウザ間の差異も吸収してくれているため) jQueryの利用が許される環境であれば使用することでコーディングの作業が減ります。 (処理内容によっては処理が重たくなる可能性がありますが) >それと、このgoogle cdnの指定の仕方?だとデフォでコードが圧縮されてるんですか・・?(読み込みが早いのか そうですねgzipという形で圧縮されてきます。 ただ、完全なローカルでの確認が出来ません。(外部(google)に接続されるため) あとはバージョン指定しなくても最新版を常に利用できます。(もちろん過去のバージョンも指定可能) ==== jQueryを利用しないでNo.2のサンプルを実行する (エラー処理等省いているところがあります) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>javascriptからphpへ変数</title> <script type="text/javascript"> window.onload = post; function post() { var http = create(); http.open ( 'POST', './access.php', true ); var send = 'w=' + screen.width; send += '&h=' + screen.height; http.setRequestHeader ( 'Content-Type' , 'application/x-www-form-urlencoded; charset=UTF-8' ); http.send ( send ); } function create() { if ( window.ActiveXObject ) { try { return new ActiveXObject ( 'Msxml2.XMLHTP' ); } catch ( e ) { try { return new ActiveXObject ( 'Microsoft.XMLHTTP' ); } catch ( e2 ) { return null; } } } else if ( window.XMLHttpRequest ) { return new XMLHttpRequest(); } return null; } </script> <style type="text/css"> </style> </head> <body> </body> </html>
補足
わざわざ回答ありがとうございます! jQueryが内部的にすごく簡単にクロスブラウザを実現してくれてるのですね( ・∀・) それにしてもIEのせいでいつも苦労しますね・・(汗 この件とは関係ないのですが、検索エンジンなどで「ぬるぽ」などを調べた場合 http://www.google.co.jp/search?rlz=1C1AVSJ_enJP460JP460&aq=f&sourceid=chrome&ie=UTF-8&q=%E3%81%AC%E3%82%8B%E3%81%BD &q=%E3%81%AC%E3%82%8B%E3%81%BD この部分が「ぬるぽ」だと思うのですが、これを日本語でpostにするのはどうしたらいいのでしょうか・・? decodeURI(document.referrer)で表示するとうまく日本語を表示してくれるのですが、これをphpに引数としてpostすると文字化けします・・ ホームページなどは全てSJISです。 <script type="text/javascript">の部分にcharset="shift-jis"などをつけてもうまくいきません・・ php.iniの設定は特にいじっていません。 サーバーはロリポップの105円のです。 今自作のアクセス解析を作ろうと奮闘しております。 もし宜しければ回答よろしくお願いいたします・・。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 以下のような感じでPHPに値を渡せます。 ==== access.js var width = screen.width; var height = screen.height; document.write ('<script type="text/javascript" src="./access.php?w=' + width + '&h=' + height + '"></script>' ); ==== 解析対象のページ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>javascriptからphpへ変数</title> <style type="text/css"> </style> </head> <body> <script type="text/javascript" src="./access.js"></script> </body> </html> ==== access.php <?php $width = $_GET['w']; $height = $_GET['h']; $str = 'Width=' . $width . ',Height=' . $height ."\r\n"; $fp = fopen ( './log.log', 'a' ); fwrite ( $fp, $str ); fclose ( $fp ); ?>
お礼
回答ありがとうございます!
補足
access.phpに引数をつけない、postの方法では無理なんでしょうか? getElementById("formのID").submit() みたいな方法で・・ よくわからないんですが(汗 URLに引数をつけていると、そのファイルがアクセス解析のためのものだとわかってしまいそうなので、推測されないような方法がいいです(汗
お礼
ありがとうございます! まさにこういうことがやりたかったです! jQueryって便利ですねー(汗 jqueryに書かれていることって基本、javascriptで自分で実現できるものなんですか? jQuery.post() 関数など・・ それと、このgoogle cdnの指定の仕方?だとデフォでコードが圧縮されてるんですか・・?(読み込みが早いのか すみません質問ばかりで・・(;´Д`) 回答してくださって非常に感謝しています。 本当にありがとうございました。