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

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

Ajax以外で、JavaScriptからPHPへ渡

Ajax通信以外で、JavaScriptからPHPへ変数(配列)を渡したいのですが、 可能でしょうか? 下記のような状態の時、js変数dataを、Ajax通信を利用せずにPHP変数として取得したいのですが、どうすればよいでしょうか? JavaScript関数の中で、PHPフォームの送信ボタンをクリックさせる(ような)ことは出来ないのでしょうか? <button type="button" onclick="testsubmit();">送信</button> <script> function testsubmit(){  js処理;  var data = ★★; } </script> ■最終的にやりたいこと ・ボタンをクリックしたら、js処理で取得したjs変数(配列)を、Ajax通信を利用せずに、PHP変数として受け取りたい ・それを出来れば1クリックで処理したい

  • re999
  • お礼率61% (476/777)

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5077/13264)
回答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

  • PHPの配列をjavascriptへ渡したい

    PHPの配列をjavascriptの配列に渡したいのですがやり方がわかりません。 変数の渡し方ならわかるのですが配列はどう渡せばいいのでしょうか? for文を使って渡せばいいと思うんですがどうやればいいか分かりません。 <?php $filedata=file("data.txt");//javascriptに渡したい配列 ?> <script language="javascript"> var a=new Array();//PHPの配列をこの配列に入れたい </script> 何方か教えてください。

    • ベストアンサー
    • PHP
  • jQueryでajax

    ajax(jQuery使用)を使った以下のサンプルは、 セレクトボックスを選択すると、ボタンを表示するのですが、 そのボタンをクリックしても、アラート(This is success!)が表示されません。 ajaxで吐き出した<button>ボタン</button>のボタンのクリックイベントが 検知しないような感じですが、いったいどこが間違っているのかわかりません。 どなたか、ご教授いただけると助かります。 htmlソース ------------------------------------------- <meta http-equiv="content-script-Type" content="text/javascript" /> <meta http-equiv="content-style-Type" content="text/css" /> <link rel="stylesheet" href="./photo.css" media="all" /> <title> テスト</title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function() { $("button").click(function() { alert("Test is success!"); }); $(".first").change(function() { var param = ''; $.ajax ({ type: "POST", url: "ajax.php", data: param, cache: false, success: function(res) { $("#result").html(res); } }); }); }); </script> </head> <body> <select name="first" class="first" id="first"> <option value="1">項目1</option> <option value="2">項目2</option> </select> <p>結果:</p> <div id="result" style="width:808px;"></div> </body> </html> phpソース ---------------------------------------- <?php echo '<button>ボタン</button>'; ?>

    • ベストアンサー
    • AJAX
  • AjaxのOnFailureについて

    Ajax(prototype.js)を使用しているのですが、OnFailureが呼び出されてしまいます。 プログラムの流れです。 ボタン押下(html) ↓ 前処理(js) ↓ サーバのファイル情報取得(ajax非同期通信→php→戻ってきて情報取得) ↓ 取得したファイル数ループ(js) ↓ ↑ 別のサーバにコピー(ajax非同期通信→php→戻り値判定) ↓ ループ抜けたら終了処理 大量のファイルを処理した場合、4~5経過したあたりで 「別のサーバにコピー(ajax非同期通信→php→戻り値判定)」 が正常に行われず、後処理として記述してあるOnFailureを呼び出してしまいます。 OnFailureについて調べてみたのですが、MSDNのAjaxOptions クラスに 「ページの更新が失敗した場合に呼び出される JavaScript 関数。 この関数は、応答ステータス 200 の範囲内にない場合に呼び出されます。」 と記述されていました。 応答ステータスとは何を指しているのでしょうか。 回避方法があれば教えてください。 よろしくお願い致します。

  • javascriptからphpに配列データを渡す方法

    今、Javascriptからphpに配列データを 渡したいと思っています。 あるcheckboxがクリックされたら、 jqueryのajaxを使用して、 ある1次元配列a[] , b[]をphpに渡し、 処理をして、結果をブラウザに表示します。 配列をどうやったら渡せるのか、 何か方法があれば教えて頂けませんかm(_ _)m

  • Node.jsでajaxがうまくいかない

    nodejs初心者なのでよくわからずやっていて恐縮ですが、うまくいきません。 https://phpotameshi-hoto345.c9users.io/node-ajax/hello_ajax.html なのですがもともとはphpで送信ボタンを押したときにphpが実行されるものでしたが、これを少し改良してNode.jsでやってみようと思ったのですが、phpと違って <script src="scripts/hello.js"></script> のようにnodejsを読み込んでやれば同じ結果になると思ったのですがうまくいきません。 その前にローカルでもNode.jsは使えるようなので >node test.js Server running at http://localhost:8124/ のようにしてローカルでやってもhttp://localhost:8124/自体は問題なく立ち上がりtest.jsの中身は実行されたのですが、ajaxの方がうまくいきません。 ローカルでのNode.jsもServer running at http://localhost:8124/ となっていればNode.jsのサーバは起動しているので、 ローカルでhello_ajax.htmlを起動して、buttonを押せばajaxもnodejsも実行されるのではないでしょうか?

  • javascript と php とでのデータの受け渡し

    既出の質問かもしれませんが、どの回答を読んでもいまいち理解できなかったので質問させて下さい。 phpからjavascriptへ、その処理結果をphpに送りたいと考えております。 まず phpの変数のデータをjavascriptでクライアント側で処理させるために、 print(<script type='text/javascript'>);~などなど、 printを使ってphpの変数を入れ込んだスクリプトを出力しています。 そして、出力したjavascriptの中にクライアント側の処理後のデータ をphpに送るために、 XmlHttpRequestのopenメソッドで("GET",url,true)とし、 urlには"***.php" + "?a=" + aの値 をいれて request.send(null);で送信するようにしています。 最後に、送信先のphpで $a = $_GET["a"];として受け取ろうとしています。 ちなみに、これらは全て同一ファイル上に書いてあり、 XmlHttpRequestのopenメソッドのurlには、 そのファイル自身を記述してあります。 ブラウザでアクセスしてソースを見てみると、 javascriptは記載されていますが、処理がされていないようで、よって 最後にGETでデータも取得がされていないようです。 そもそもこういったことは可能なのでしょうか? 自分の考え方は間違っているのでしょうか? javascriptもphpも初心者なもので、考え方があっているのかいないのかも 判断できない状況です。また、このjavascriptが何をきっかけに実行されるようにすればいいのかもよくわかりません。 それでは、宜しくお願い致します。

  • ajaxでエラー処理

    お世話になります。 prototype.jsを使ってajaxのエラー処理を考えております。 そこで質問なのですが、以下のソースで OK.phpでは正常に処理が行われ、 NG.phpでは強制的にonFailure処理を行わせたいと考えております。 PHP側(NG.php)で、操作出来ませんでしょうか? よろしくお願いいたします。 <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <script type="text/javascript" src="prototype.js"></script> <script type="text/javascript"> <!-- function ajax(fName) { var filename = fName + "?cache="+(new Date()).getTime(); new Ajax.Request(filename, { method: "get", onSuccess: displayData, onFailure: displayError }); } function displayData(httpObj) { $("result").innerHTML = httpObj.responseText; } function displayError(httpObj) { $("errMsg").innerHTML = httpObj.responseText; } // --> </script> </head> <body> <input type="button" value="正常処理" onClick="ajax('OK.php')"><br> <input type="button" value="エラー処理" onClick="ajax('NG.php')"><br> <div id="result"></div> <div id="errMsg"></div> </body> </html>

  • Ajax+JavaScriptにて外部データの取得について教えて下さい。

    お世話になります。 現在、JavaScriptとAjaxを勉強中なのですが、Ajaxを使ったデータ取得において、外部サーバデータ(例えばYahooホームページのソース)等を取得するには、PHPにて作成した簡易ブラウザが必要と記してありました。 つきましては、PHPでの簡易ブラウザのコードが記述されている書籍・サイトをご紹介頂けます様お願いします。 また、AjaxにてPrototype.jsなどを使っているのですが、具体的で実用的なAjaxの使い方をご教示頂けます様お願いします。 上記質問がカテ違いの場合はご指摘頂けます様お願いします。

    • ベストアンサー
    • AJAX
  • AJAXとSEO。同期通信とPHP送信の違い

    「AJAX」「SEO」「同期通信」「PHPでPOST送信」について、幾つか分からないことがあるので教えてください ■質問1 ・AJAX通信すると、SEO的に不利なのでしょうか? 例えば、AJAXでCSVファイルを読み込む場合はどうなるでしょうか? もしかして、実装方法による? 下記例で、何か違いはあるでしょうか? ・例1 … 非同期。ページ読込後にCSV読込(そもそもこの実装は可能?) ・例2 … 非同期。ページ読込前にCSV読込 ・例3 … 同期。ページ読込後にCSV読込 ・例4 … 同期。ページ読込前にCSV読込 ■質問2 ・AJAX通信で検索ボタンを押したページ結果は、クローラーされることはあるのでしょうか? サーバからデータを取得しているから反映される? 非同期だったら、反映されない? 同期だったらされる? ■質問3 ・AJAX通信の同期処理の意味が分かりません(jQueryのasyncをfalseなど)。非同期通信がAJAXだと思うのですが、AJAX通信の同期処理というのは、何なのでしょうか? 例えば、「PHPでPOST送信」するのと、原理的には全く同じということになるのでしょうか?(PHPで実装するか、js実装するかの違いだけ?) 最終的に、SEOを重視する場合は(非同期の操作性を捨て)同期処理で実装した方が良い、ということになるのでしょうか?

    • ベストアンサー
    • AJAX
  • AjaxでのHTML呼び出しでjavascriptが読み込まれません。

    自分のホームページにprototype.jsを使用してボタンクリックでのHTML呼び出しをやっているのですが、<script>は無視されてしまいます。 ちなみにコードは、 <input type="button" value="GoogleNews" onclick="new Ajax.Updater('blk','page/sample1.html',{method: 'get'});"/> <input type="button" value="GoogleSearch" onclick="new Ajax.Updater('blk','page/sample2.html',{method: 'get'});"/> <input type="button" value="GoogleMaps" onclick="new Ajax.Updater('blk','page/sample3.html',{method: 'get'});"/> <div id="blk"></div> といったようなカタチです。もちろんprototypeは読み込んでいます。 呼び出すHTMLに<head>をつけてjavascriptだと定義してもダメでした。 ネットでも調べてみましたが、できないようなことがチラっとだけ書かれていました。 私がやりたいのは、ページを移動せずにボタン切替でGoogleSearchAPIやGoogleGadgetを表示させるというものです。 何かいい方法はないでしょうか?

専門家に質問してみよう