• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Ajax以外で、JavaScriptからPHPへ渡)

Ajax以外でJavaScriptからPHPへ変数を渡す方法

このQ&Aのポイント
  • JavaScriptからAjax通信を利用せずにPHP変数を受け取る方法を知りたいです。
  • JavaScript関数の中で、PHPフォームの送信ボタンをクリックさせることはできません。
  • ボタンをクリックした後、Ajax通信を使用せずにJavaScriptで取得した変数をPHP変数として受け取りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5253/13739)
回答No.1

ボタンを押した後に画面が遷移していいのであれば <button type="button" onclick="testsubmit();">送信</button> <form action="xxx.php" method="post" name="jsform"> <input type="hidden" name="hoge" id="hoge" value=""> </form> <script> function testsubmit(){  js処理;  var data = ★★;  document.getElementById('hoge').value = data;  document.jsform.submit(); } </script>

re999
質問者

お礼

回答ありがとうございました。 >document.getElementById('hoge').value = data; >document.jsform.submit(); 取得して、送信できるんですね。 大変参考になりましたー

その他の回答 (3)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.4

ANo3です。 私もよくわかってませんが、わかる範囲で・・・。 後は、他の方が訂正してくれるでしょう。 >1.scriptタグで、jsファイルではなく、phpファイルを指定しても良いのでしょうか 通常はjsファイルですが、phpなどでもかまいません。 sucriptタグの場合は、phpがスクリプトを返せばそのまま動作します。 imgタグの場合は、画像データを返せばそれが表示されます。 >2.使い方としては、location.href = url;で、遷移(もしくは更新?)させ 送信するのみという条件だと解釈しています。それなので、遷移は必要ありません。 遷移するのであれば、遷移先のuriを指定し(例えばhoge.php)、遷移先がソースをブラウザに返さないと表示できません。ご質問文では一方向の送信のみで、phpは送信を行はないのだと思いました。 (ANo2様の回答にその旨の確認が書いてあるかと思います) 使い方としては function fuga(){  ~~~ } とでもしておいて、呼び出すだけです。 実際には、phpに渡すデータは状況によって変わるのでしょうから、その内容を引数にしておく必要がありますね。 >3.imgタグのsrcでなぜこのような(URLパラメータとして付与する)ことが可能なのでしょうか? uriの仕様がそうなっているからです。 今回の場合は、送信先がphpなので、php側でパラメータとして読取れば、送信したことにできるということを利用しています。 ブラウザは画像データをリクエストしたつもりでいるはずですが… >2.new Image();は何をしているのでしょうか? イメージオブジェクトを生成しています。 document.createElement("img") と同等だと思います。 >このオブジェクト(?)の有効期間はブラウザを閉じるまで、ぐらいなのでしょうか? 上記で紹介したように、function fuga(){ ~~内で用いれば、その関数内の変数は関数の実行範囲内でのみ有効となりますので処理が終われば開放されるというしくみです。 (グローバル環境でオブジェクトを生成するとちょっと違ってきます) ANo2様の回答と少し違うのはこの点で、ドキュメントに追加していないので何度関数を呼び出してもドキュメントは変わらないということになります。 まあ、No2様のようにscript要素を追加したとしても、どうということもないという意味では同じですが。 >3.new Image();で作成した「img」はDOMとは違うのでしょうか? すみません。専門家ではないので、言葉遣いがよくわかっていませんです。 勝手な解釈では(正しいところはわかりません)、DOM要素ではあるものの、ドキュメントに追加はされていないということなのかも。 それなので、前述のように関数が終了した時点で開放されると思います。 もしかすると、画像データのレスポンスを待ち続けるのかも知れませんが、一定時間が過ぎれば打切られるはず。(画像のリンク切れと同じような処理になるかと)

re999
質問者

お礼

回答ありがとうございました。 回答いただいた内容は、今回自分が知りたかったことに一番近かったわけではないのですが、 こういう使い方もできるんだ、と思うところがあり、大変参考になりましたー

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

ANo2様と同じ発想ですが… var url= "hoge.php?a=aaa&b=bbb"; var img = new Image(); img.src = url; ドキュメントを変えないので、関数にしておけば何度呼び出してもDOMに影響しません。

re999
質問者

お礼

回答ありがとうございましたー

re999
質問者

補足

回答ありがとうございました。 おかげでやりたいことは実現できたのですが、分からないことがあるので、教えていただけないでしょうか? 1.No2さんの補足に書いた、「2」「3」の件 2.new Image();は何をしているのでしょうか? JavaScriptにImageクラスみたいなのがあって、それのインスタンスオブジェクトを作成しているような感じなのでしょうか? 試しに「location.href」させてもimgは利用できたのですが、このオブジェクト(?)の有効期間はブラウザを閉じるまで、ぐらいなのでしょうか? 3.new Image();で作成した「img」はDOMとは違うのでしょうか?

  • tumeno
  • ベストアンサー率41% (5/12)
回答No.2

PHP側で受け取るだけで良いのですよね(結果のデータは返さない) var url= "hoge.php?a=aaa&b=bbb"; var s= document.createElement("script"); s.setAttribute("type","text/javascript"); s.setAttribute("src",url); s.setAttribute("charset","UTF-8"); document.body.appendChild(s); これでPHP側でデータを受け取れます。

re999
質問者

お礼

回答ありがとうございましたー

re999
質問者

補足

回答ありがとうございました。 おかげでやりたいことは実現できたのですが、分からないことがあるので、教えていただけないでしょうか? 1.scriptタグで、jsファイルではなく、phpファイルを指定しても良いのでしょうか? <script type="text/javascript" src="hoge.php.php?a=aaa&b=bbb" charset="UTF-8"></script> 2.使い方としては、location.href = url;で、遷移(もしくは更新?)させ、$_GET["a"];で取得する感じでしょうか? location.hrefさせずに、取得する方法はあるでしょうか? 3.imgタグのsrcでなぜこのような(URLパラメータとして付与する)ことが可能なのでしょうか? そういう仕様だから? imgタグsrcの読み込まれる要件とかって、何かあるのでしょうか?

関連するQ&A

専門家に質問してみよう