• ベストアンサー

JavaScriptからPHP呼び出しHTML出力で…

現在phpにてブログのカテゴリリストを取得して、投稿ページ (HTML)上にカテゴリのプルダウンを表示しようと試みている のですが、JS(JavaScript)からPHPを呼び出しHTML上に出力する 際にPHPファイルにincludeがあるとjavascriptエラーとなって しまいます。 ちなみに参考にしたホームページはこちらです。 http://www.res-system.com/item/383 PHPソース(init.php)↓ <?php include_once('entry.php'); // ←エラーの箇所 // ヘッダ header("Content-Type: application/x-javascript; charset=UTF-8"); // インスタンス生成 $obj = new XMLComm(); // 初期設定 $obj->XMLComm(); // カテゴリ取得 echo "document.write(\"$obj->getCategories()\")"; ?> HTMLソース(entry.html)↓ <HTML> <HEAD> <TITLE>BLOG ENTRY</TITLE> </HEAD> <BODY> ブログエントリー</br> <script type="text/javascript" src="/init.php"></script> </BODY> </HTML> ちなみに、include等が無い状態で任意の文字で試したのですが こちらはきちんと表示されます。 javascriptでincludeなど呼び出しているphpを起動することは できないのでしょうか… 解決策、別案などありましたらご教授いただけたら幸いです。 phpを始めたばかりの初心者で、質問自体おかしい点があるかも しれませんが、、どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

echo "document.write(\" {$obj->getCategories()} \")"; 文字列内でオブジェクトの参照を利用する時は、{}で括りましょう。 http://php.s3.to/man/language.types.string.html#language.types.string.parsing.complex でなければ、echo 文を使うなら、分割引数にする。 echo 'document.write("', $obj->getCategories(), '")';

参考URL:
http://php.s3.to/man/language.types.string.html#language.types.string.parsing.complex
moritakos
質問者

お礼

hrm_mmmさん度々回答いただきありがとうございます! 教えていただいたやり方で無事解決しました! 教えていただいたPHPマニュアル、もっと勉強しようと 思います。 ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

header()出力前に、include内でよけいな出力がされてるからでは? 何らかの出力が行われると、その時点で、とりあえずのheaderが送信されてしまい、 その次のheader()出力は、contentとして評価されるのでjavascript構文としては文法エラーになります。 今回の場合は、include文をheader()より後方で実行すればいいだけでしょう。

moritakos
質問者

補足

hrm_mmmさん回答ありがとうございます! 教えていただいた箇所修正したところ、エラーはなくなり ました! ただ、 echo "document.write(\" $obj->getCategories() \")"; ここの部分で表示されるのが()括弧だけなんです。 この部分を下記のように修正して echo $obj->getCategories(); 直接init.phpをたたくときちんと表示されるので値は取得できて いるのですが、phpの返り値をきちんと文字列に変換などしないと いけないのでしょうか? ちなみに$obj->getCategories()で返却される文字列は下記の ような感じです。 <select name = 'categorie'> <option value = 1>日記</option> <option value = 2>備忘録</option> </select> 色々とやってみたのですがうまくいかず、、度々お手数おかけ いたしますが、解決方法ありましたらご教授お願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
noname#39970
noname#39970
回答No.1

そのような場合は XMLHttpRequest が適当なのでは? ajaxで引くと沢山でてくると思おう

moritakos
質問者

お礼

SAYKAさん回答ありがとうございます! ajaxは初めてだったのですが、ajaxとXMLHttpRequestで検索し、 なんとか表示することができました! ただ…携帯(docomo)ではjavascript使えないんですよね? 根本的に間違えちゃったかな…とちょっとへこんでおります。 もし携帯で表示する解決策ありましたらまたアドバイスいただ けると幸いです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Javascriptで表示のページをPHPで読む

    Javascriptを使って表示されているウェブのコンテンツをPHPで読み込む方法について教えてください。 HTMLで作られている場合は「file_get_contents」でHTMLソースを取得できますが、Javascriptを使って表示されたページのソースを読み込むにはどのようにしたらよいのでしょうか。 読み込みたいページは下記のような構造になっています。 <html> <head> </head> <body> <h2>タイトル</h2> //ここのコンテンツ部分がJavascriptをONにしないと見えない。 </body> </html>

    • ベストアンサー
    • PHP
  • PHPでJavascriptの引数の扱い方

    はじめまして。宜しくお願い致します。 環境:Linux(Redhat 9), apache2, PHP4.3.6 [やりたいこと] 下記↓ソース内容↓より、input=button と input=text が幾つかある。 個々のボタンが押されたら、PHPにて"個々"の内部処理を行う。 内部処理終了後は、個々のテキストにインクリメントした値が画面表示される。 HTML+Javascript にて、カウンター部分は一応完成しています。 ↓ソース内容↓ <html> <head> <script language="JavaScript"> <!-- function ccc(obj0) { cnt = obj0.value; cnt++; obj0.value = cnt; } // --> </script> </head> <body> <form name="ose"> <input type="text" name="view0" readonly size=5 maxlength=3> <input type="button" value="押せ0" onClick="ccc(view0)"><br> <input type="text" name="view1" readonly size=5 maxlength=3> <input type="button" value="押せ1" onClick="ccc(view1)"> </form> </body> </html> コレをPHPに書き換えると、上手くいきません。 ↓PHPに書き換えた場合↓ <script type="text/javascript"> <!-- function ccc($obj0) { cnt = $obj0.value; cnt++; $obj0.value = cnt; } // --> </script> 引数に付いている "$"マークをJavascript側で認識しないのだろう、と考えています。 出来れば、PHPで単体の関数として使用したい為、模索中です。 ※現在は、別の関数の中に上記の『↓HTML+Javascriptの場合↓』を無理矢理入れて使用しています。(別の関数:HTMLをPHPファイルに書き込む) 別の関数内に入れてても問題は無しです。 但、上記のJavascriptを使用しないソース達にも書き込んでしまうので、ちょとやだなーと。 いい方法があったら教えて下さい。

    • ベストアンサー
    • PHP
  • phpソースの中のjavascriptを実行する方法

    現在、AJAXの勉強をしているプログラミング初心者です。 環境はapache2,php5です。 phpのソースの中にjavascriptを埋め込んだものを動作させるには どうしたらよいのかが分かりません、 例えば以下の2つのファイルの場合。 abc.php↓ --------------------------------------------------------------- <html> <head></head> <body> <?php echo "こんにちわ"; ?> <script tyep="text/javascript"> alert("hello"); </script> </body> </html> --------------------------------------------------------------- abc.html↓ --------------------------------------------------------------- <html> <head> <script> try{ var obj= new ActiveXObject("Microsoft.XMLHTTP");} catch(e){var obj=new XMLHttpRequest();} function load(point){ obj.open("POST","abc.php",true); obj.send(null) obj.onreadystatechange=change; } function change(){ if(obj.readyState==4){ document.getElementById("target").innerHTML=obj.responseText; } } </script> </head> <body> <div id="target"></div> <a href="#" onclick="load();">click!</a> </body> </html> --------------------------------------------------------------- としたところ、 abc.phpを実行した場合はabc.phpのjavascriptが実行されてアラートがでるのですが、 abc.htmlからabc.phpにリクエストを出して出力された場合には、 javascriptが実行されずにアラートが出ない。 どうしてこのようになるのでしょうか? また解決策があれば教えてください。 よろしくお願いします。

  • HTML→PHPへ値を渡して再びHTMLに結果出力

    HTMLからPHPへ値を渡して、再びHTMLに結果を表示したいと思っています。 以下のような簡単なコードを書いてみましたが、HTMLのページに"OK"という文字が表示されません。 PHPのパーミッションは755でやっており、PHPが動作するサーバーでテストしています。 どう修正すれば良いのか、アドバイスをお願い頂けますでしょうか? どうぞよろしくお願い致します。 【HTML】 <html> <head> </head> <body> </body> <script type="text/javascript" src="http://xxx.com/test/jsphptest.php?param=1"></script> </html> 【PHP】 <?php $param = $_GET['param']; header("Content-type: application/x-javascript"); if ($param == '1') { echo "document.write(\"OK\")"; } else { echo "document.write(\"NG\")"; } ?>

    • ベストアンサー
    • PHP
  • javascriptとphpの変数のやり取り

    ある該当ページ(mtの検索結果ページ)が拡張子をphpにできず、 <script src=hogehoge.php></script>でphpファイルを読み込んで、 実行したいと思います。 phpを使用している理由はある変数を取得したいのですが、 今回は関係ないので割愛します。 ■以下ソース ・該当ページ(mt-search.cgi) <html> <head> <title>hoge</title> <script type="text/javascript" src="/hogehoge.php"></script> </head> <body> <script> document.write("<p>"+str+"</p>"); </script> </body> </html> ・phpファイル(hogehoge.php) <?php if(test == test){ $str = "成功" }else{ $str = "失敗"; } ?> <script type="text/javascript"> <!-- var str= "<?php echo $str?>"; --> </script> このようにしているのですが、 うまく出力されません。 php側の出力はうまくいっているようなのですが、 ブラウザ側の方でちゃんと変数がわたっていないようです。 画面は真っ白です。 ご教授お願いいたします。

  • JavaScriptを使う時は、

    ・・・・・・・・・・・・・・ <HTML> <HEAD> <TITLE> </TITLE> </HEAD> <BODY> <script> alert("test"); </script> </BODY> </HTML> ・・・・・・・・・・・・・・ これでメッセージボックスが表示されるのですが、 なぜ <script type ="text/javascript"> <!-- //--> </script> で括らなくていいのでしょうか? JavaScriptを使う時は、 <script> </script> だけでもいいのでしょうか? http://www.pori2.net/js/kihon/4.htmlこのサイトを参考にしました。

  • PHPが出力したHTMLにinclude文を

    PHP4.3で、HTMLファイルをテンプレート出力する方式の掲示板を使っているのですが、テンプレートのHTMLファイル内に別のPHPスクリプトで出力した表示を貼り付けようと思い、 <?include("hoge.php");?> とinclude文を書き込んだのですが、これが反映されずにソース内に<?include("hoge.php");?>という記述がそのまま出て来てしまいます。 これが出来ない原因は、PHP実行→HTML表示→HTML内のPHP実行という二度のPHP実行が出来ないのか、<?include~を「文字列」として認識してしまっているのかのどちらかだと思うのですが、、 PHPファイルには一切手が加えられない状況なので、テンプレートHTMLに手を加えるだけで別のPHPスクリプトを読みこませたいのですが、何かいい方法は無いでしょうか?

    • ベストアンサー
    • PHP
  • JavaScriptのタイマーについて

    JavaScriptのタイマーについて上手く動作しないので質問させて頂きます。 <仕様>  3秒後に「aaa」のメッセージを表示させる。  5秒後に「aaa」のメッセージを表示させる。 <現在の状況>  3秒後に「aaa」のメッセージを表示し、その後は応答なし。 <ソース> 以下を参照ください。何が悪いのでしょうか? <HTML> <HEAD> <SCRIPT Language="JavaScript"> <!-- timerID = 10; function func() { alert("aaa"); } function init() { timerID = setTimeout("func()", 3000); timerID = setTimeout("func()", 5000); } // --> </SCRIPT> </HEAD> <BODY onload="init()"> </BODY> </HTML>

  • HTMLとJAVASCRIPT

    パソコンほぼ初心者なのですがHTMLとPHPとJAVASCRIPTを用いて軽いシステムを構築しています。 そこで一つ質問があります。 ---------------------- <html> <head> </head> <body> 表示させたいテキストボックスンの数は <input type=text> 個です。 </body> </html> --------------------------------- 上記のソースなんですが、テキストボックスに数字を入れて、その数だけテキストボックスを表示させたいのですが、どのようにすれば良いでしょうか? ブラウザはIE7です。

  • HTML中のPHPが実行されない

    以下のソースをindex.htmlにしてWebサーバーに置いたのですが、ウェブでアクセスはできますが、PHPの実行がされないようです。 それとも、PHPの使い方のミスでしょうか。 <HTML> <TITLE>TEST</TITLE> <BODY> あいうえお<BR> <?include("count.php");?>のアクセスです。<BR> <?php echo $_SERVER["HTTP_USER_AGENT"];?><BR> </BODY> </HTML>

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • プリンターの繰返し用紙詰まりA:内部/前の表示が全く消えず、電源の再起動などの試行も効果がありません。目詰まりも確認できません。
  • お使いの環境はWindows10であり、無線LANで接続されています。関連するソフト・アプリは不明です。
  • 電話回線の種類は不明です。問題はブラザー製品に関するものです。
回答を見る

専門家に質問してみよう