- ベストアンサー
JavaScriptでPHP関数内でデータ取得する方法
- PHPとMySQLを使用して機械部品の管理を行うプログラムを作成しています。JavaScriptを使って入力したパーツ番号から詳細説明を取得できるはずですが、うまく動作しません。この質問文章では、JavaScript関数内でのPHP関数の実行について相談しています。
- 提供されたPHPファイルでは、PHP関数getDescription()は機能しているようですが、JavaScript関数GetDesc()内で使用すると機能しません。さまざまな試みを行いましたが、うまくいきませんでした。問題を解決するためのアドバイスを求めています。
- この問題を解決する方法がわからず困っています。提供されたPHPコードと実行結果のスクリーンショットを添付しています。どのようにすれば思い通りに動作するか、助言をいただけませんか?
- みんなの回答 (13)
- 専門家の回答
質問者が選んだベストアンサー
xmlhttp.open("GET", "JSON-TEST4.php?object=" + num , true); GETは、実際にURLバーにその文字が入っているのと同じ状態なので 結果的にURLバーの長さの制限を受けます。 POSTの場合は長さの制限がほぼないので、 例えば「ローカルから長いデータを送り出したい?」ってときは、 この方法だと、いつかトラブルかもしれません。 で、xmlhttp.openこいつでも、POST送信はできるので、 そこを治すことでより大きなデータを扱えますよ。 ただ、「JSからPHPを叩ける」の意味を完全に 理解したことがわかるソースを貼ってくれたのがうれしく思います。 少なくとも、もうTXTファイルだらけにする必要もないですし。 PHPにパラメーターが渡せるのなら、どんな機能も実装可能だ ってことが、一番のテーマだったので、よかったかなと 思います。 この板は、質問者さんがOKなら、閉じてもOKですよ。
その他の回答 (12)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
もしかして、 document.getElementById("DSC").innerHTML = "<?php $pn = '" + PN + "'; echo getDescription($pn); ?>"; 結合したい?のですか?であれば、こうではないですか? document.getElementById("DSC").innerHTML = PN + "<?php echo getDescription($pn); ?>"; サーバー側で、"<?php echo getDescription($pn); ?>" この部分が確定して例えば"あいうえお" だとしたら var PN = document.getElementById("PN").value; 例えばこれが、"わ~”; なら、上のPNと"<?php echo getDescription($pn); ?>" これで、 PN = "わ~" + "あいうえお"; = PN = "わ~あいうえお"; が、インナーに入りますよ。
- AsarKingChang
- ベストアンサー率46% (3467/7474)
根本的なミスがあります。 PHPはサーバーサイドで JavaScriptはクライアントサイドですよ。 なので、手元にソースが落ちて来た時点でPHPの成形結果が すでに固定されているのです。 それをJavaScriptで処理するので、 function getDesc(){ var PN = document.getElementById("PN").value; PN = "'"+ PN +"'"; document.getElementById("DSC").innerHTML = "<?php $pn = '" + PN + "'; echo getDescription($pn); ?>"; ↑このPNは、クライアントが作るJSの変数 しかし、PHPはサーバーサイドなので、 成形段階でこの辺数はないので、無効=""でしかない。 } というのが、原因です。 なので、サーバー内では何をすべきか? クライアント内で何をすべきかを わけて考えれば、この件は解決できます。 ということで回答は <?php 内でのPNはサーバー空間で <script>内のvar PNはクライアント空間なのを ごっちゃ混ぜにしたことが原因です。
お礼
早速にご回答を頂き、有難うございます。 AsarKingChangさんにはいつもお世話になっていて本当に感謝です。 ご回答ではPNはJS変数なのでPHPでは無効とおっしゃいましたが、この echo getDescription($pn); の部分をecho $pn; に変えると JS変数PNの値を保持したPHP変数をちゃんと表示します。 単なる変数なら表示するのに、関数の戻り値は何故表示されないのかというのが私の疑問です。 問題の行 document.getElementById("DSC").innerHTML = "<?php $pn = '" + PN + "'; echo getDescription($pn); ?>"; の右辺は、PN='012-022-20' とすると結局次のようなPHPコードを表すHTMLタグになりますよね。 <?php $pn = '012-022-20'; echo getDescription($pn); ?> このようなコードは別にJS関数の中だけでもなくHTMLファイルのあちこちで使っています。 これを左辺に代入するのだから、それはHTMLのタグとして解釈されてPHPのコードが実行されると思いますし、 実際に変数の値は表示されたのです。 JSはクライアントサイドでPHPはサーバーサイドということだけではよく理解できません。 どうかよろしくお願いいたします。
- 1
- 2
お礼
返答ありがとうございます。 POSTで送る方法も分かりましたので、長いパラメーターを渡したい時には使ってみようと思います。 ただ、現状では10文字前後のパーツ番号を送ってその属性を取得するだけのルーチンを作りたいだけなので、今回はGETのままにしておきます。 なんだかマンツーマンで授業を受けているような感じで、学生に戻ったように気持ちが良かったです。本当に貴重な時間を割いて教えて頂き、有難うございました。 今回の質問はこれで締めさせていただきますが、まだまだ勉強不足の私の事ですから、PHP、JAVASCRIPT, JSON, JQUERYなどについてこれからもOKWAVEに質問を沢山 乗せてもらうことになると思います。また機会があったら色々と教えてください。 AsarKingChangさんのお仕事の方でも、これからいいことが沢山あることを祈ります。