• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Javascript 関数内でのPHP関数)

JavaScriptでPHP関数内でデータ取得する方法

このQ&Aのポイント
  • PHPとMySQLを使用して機械部品の管理を行うプログラムを作成しています。JavaScriptを使って入力したパーツ番号から詳細説明を取得できるはずですが、うまく動作しません。この質問文章では、JavaScript関数内でのPHP関数の実行について相談しています。
  • 提供されたPHPファイルでは、PHP関数getDescription()は機能しているようですが、JavaScript関数GetDesc()内で使用すると機能しません。さまざまな試みを行いましたが、うまくいきませんでした。問題を解決するためのアドバイスを求めています。
  • この問題を解決する方法がわからず困っています。提供されたPHPコードと実行結果のスクリーンショットを添付しています。どのようにすれば思い通りに動作するか、助言をいただけませんか?

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

  • ベストアンサー
回答No.13

xmlhttp.open("GET", "JSON-TEST4.php?object=" + num , true); GETは、実際にURLバーにその文字が入っているのと同じ状態なので 結果的にURLバーの長さの制限を受けます。 POSTの場合は長さの制限がほぼないので、 例えば「ローカルから長いデータを送り出したい?」ってときは、 この方法だと、いつかトラブルかもしれません。 で、xmlhttp.openこいつでも、POST送信はできるので、 そこを治すことでより大きなデータを扱えますよ。 ただ、「JSからPHPを叩ける」の意味を完全に 理解したことがわかるソースを貼ってくれたのがうれしく思います。 少なくとも、もうTXTファイルだらけにする必要もないですし。 PHPにパラメーターが渡せるのなら、どんな機能も実装可能だ ってことが、一番のテーマだったので、よかったかなと 思います。 この板は、質問者さんがOKなら、閉じてもOKですよ。

papashiroSooke
質問者

お礼

返答ありがとうございます。 POSTで送る方法も分かりましたので、長いパラメーターを渡したい時には使ってみようと思います。 ただ、現状では10文字前後のパーツ番号を送ってその属性を取得するだけのルーチンを作りたいだけなので、今回はGETのままにしておきます。 なんだかマンツーマンで授業を受けているような感じで、学生に戻ったように気持ちが良かったです。本当に貴重な時間を割いて教えて頂き、有難うございました。 今回の質問はこれで締めさせていただきますが、まだまだ勉強不足の私の事ですから、PHP、JAVASCRIPT, JSON, JQUERYなどについてこれからもOKWAVEに質問を沢山 乗せてもらうことになると思います。また機会があったら色々と教えてください。 AsarKingChangさんのお仕事の方でも、これからいいことが沢山あることを祈ります。

その他の回答 (12)

回答No.2

もしかして、 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 = "わ~あいうえお"; が、インナーに入りますよ。

回答No.1

根本的なミスがあります。 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はクライアント空間なのを ごっちゃ混ぜにしたことが原因です。

papashiroSooke
質問者

お礼

早速にご回答を頂き、有難うございます。 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はサーバーサイドということだけではよく理解できません。 どうかよろしくお願いいたします。

関連するQ&A