QA@IT

javascriptからphpの呼び出し

5616 PV

javascriptからphpを呼び出したいのですが、コンソールログを取ると欲しい文字列が返ってきていません。どこが悪いかぜひ教えていただきたいです。

  • test.js
var xhr = new XMLHttpRequest(); 

xhr.onreadystatechange = function() { 
    if(xhr.readyState == 4 && xhr.status == 200) {
        console.log(xhr.responseText);
    }
}
xhr.open("GET", "./php/test.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
xhr.send(null);
  • test.php
<?php
echo "大島優子と前田敦子<br><br>";
echo substr( $_SERVER["SCRIPT_FILENAME"], 0, - strlen( $_SERVER["SCRIPT_NAME"] ) );

return substr( $_SERVER["SCRIPT_FILENAME"], 0, - strlen( $_SERVER["SCRIPT_NAME"] ) );
?>
  • 現在の返り値
<?php
echo "大島優子と前田敦子<br><br>";
echo substr( $_SERVER["SCRIPT_FILENAME"], 0, - strlen( $_SERVER["SCRIPT_NAME"] ) );

return substr( $_SERVER["SCRIPT_FILENAME"], 0, - strlen( $_SERVER["SCRIPT_NAME"] ) );
?>
  • 欲しい返り値

ドキュメントルートの場所

  • javascriptはどの様に実行しているのでしょうか。 -
  • ローカルのapacheでのtest.phpの出力結果を見せてください。phpやjsを置くサーバーはそのローカルのapacheと言う事でいいですか? -
  • ローカルのapacheでは
    大島優子と前田敦子
    /Library/WebServer/Documents
    が出力されます。
    javascriptはTomcatサーブレット上で動かしています。
    -
  • 回答に追記しました。 -

回答

どういった環境で試されているのかわかりませんが、
とりあえず <?php がそのまま取得できているという事は phpを動作させる環境を構築できていません。
まずは phpでjavascriptではなくブラウザから直接なにかテキストを表示できるようにサーバー(apache?) を設定する方法を調べられるとよいかと思います。

その後、javascriptからの取得に挑戦されてはどうでしょうか。
javascriptでのリクエストはできているように思います。

test.phpのコードで functionじゃないところでreturnを使っているのが気になります。
エラーになるかもしれないので最初はこの行はコメントアウトしておいた方がいいでしょう。
phpの設定にあまり詳しくないのであれば、2行目の漢字も最初はアルファベットにしておいた方が無難だと思います(今回求めてる値ではなさそうなので)。


追記

ローカルのapacheとTomcatの関係性(設定)がわからないのでちょっと説明しようがないです。
一応現状でも、javascriptの "./php/test.php" の部分を、ローカルのapacheでtest.phpを見ている時のフルのアドレス(httpからtest.phpまで)を指定すれば取れるんではないかとは思います。

apacheとTomcatは連携できますが別のサーバーです。
連携の設定によっては、サーブレットのURLからapacheのtest.phpのアドレスを相対パスでうまく指定できるかもしれませんが、これも情報がないので何とも言えません。

または、Tomcatでphpが動作できるように設定すれば現在のコードでも実行できるかもしれません。
(現在表示されているのは、Tomcatで動かそうとしているtest.phpだと思います。Tomcatが phpが実行できる設定になっていないのでそのまま表示されているのかと。)


しかしながら現状やろうとしていることは
apacheのドキュメントルートを、ブラウザで動作させる javascriptから取りたい。そのjavascriptはTomcatで動作しているサーブレットから出力したいという事になります。
何に使いたいのかわかりませんがサーバーのドキュメントルートをブラウザ(で動くjavascript)から参照できる様にするのはセキュリティ的におすすめしません(ユーザーにサーバーの設定情報を一部漏らしてしまうため)。
サーブレット上で getContextPath()getRequestURI()を使ってそこから類推するとか、test.phpにサーブレットのjavaコードからアクセスするなどした方が良いと思いますよ。

編集 履歴 (2)
  • 回答ありがとうございます。
    上記のtest.phpをローカルのapacheで見ると、ドキュメントルートの位置を取得できています。
    ですので、javascriptから実行した際も同じ値が返ってくると思っていたのですが、そうでないため質問させていただきました。
    -
  • 質問の方にコメントさせてもらいます。 -
  • おそらくtomcat上でphpが動作するように設定できていないのだと思います。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。