- ベストアンサー
Ajax&CGIについての質問
- Ajaxプログラムを作成している際の問題について質問させて頂きます。
- サーバ側でのCGI処理でエラーが発生し、サーバー内部エラーが表示されます。
- Apacheの設定で拡張子.plをCGIとして扱わない設定にしても、処理結果ではなくソースが表示されてしまいます。原因や解決方法について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 補足への回答 > 同一ホストって ホストと言う言葉でちょっと混乱しましたね。ドメイン名の事になります。 www.hogehoge.com/aaa.htmlと言うページからXMLHttpRequestで取得出来るのはwww.hogehoge.com内のファイルのみ、と言う事ですね。XMLHttpRequest+クロスドメインで検索してみて下さい(Flashをプロキシとして使った回避方法や、JSONP等を利用する方法もあります)。 > ただ、テキストボックスに入力したIPアドをサーバで受信し、ブラウザにAjaxで”入力されたアドレスは~です”と表示させたりは動作したので単純にXMLHttpRequestは正常に動作していると考えていいものなのでしょうか・・。 この文面からすると、2.3.4,は多分問題無いでしょうね。 500番のInternal Server Errorなので、1.のCGIが正常に動いていないと言う事でしょうね。質問はAJAX&CGIですが、AJAX関連の話は頭から切り離して考えましょう。 CGIの記述か、Apacheの設定に誤りがあります。 この辺が参考になるかもしれません。 http://allabout.co.jp/internet/cgiperl/subject/msubsub_330-10.htm CGIが他のサーバで問題なく動いていたと言う事でしたら、ファイル行頭のperlへのパスが怪しいですね。あとはモジュールのインストール等。 確認して下さい。
その他の回答 (1)
- taketan_mydns_jp
- ベストアンサー率58% (450/773)
だいぶ混乱している感じですね。 AJAXと言っても別に特別な事をしている訳ではなく、せいぜい簡易ブラウザの役割をしている程度に認識していた方が間違いがありません。大概の事はiframeで代替出来ます。 問題を切り分けて見てください。 1. CGIは正常に動いていますか? AJAXではなく、通常のformでブラウザからPOST または GETで変数を送信し、返り値を確認してみてください。期待通りのものが出たらOKです。 2. CGIのホストとJavaScriptを実行するホストは同一ですか? XMLHttpRequestの仕様上、同一でなければなりません。 3. JavaScirptのXMLHttpRequestのソースは正常に動いていますか? CGIではなく、静的ページ(hogehoge.html)を読み込んで確認してみてください。 4. 送信プロトコルはGETですか、POSTですか? POSTの場合、リクエストヘッダーにapplication/x-www-form-urlencoded をつける必要があります。大丈夫ですか? http://itpro.nikkeibp.co.jp/article/COLUMN/20060607/240192/ だいたいこの辺をチェックすれば原因がつかめると思います。 > Apacheの設定で拡張子.plをCGIとして扱わないようにすると 当然です。1.でちゃんと動くのでしたら原因はほかにあります。 がんばってください。
補足
親切な回答ありがとうございます。 指摘された通りに動作テストをしてみます。 4.の送信プロトコルはGETですがURL参考になりました。 あと初歩的な質問で恐縮ですが、2.の同一ホストって特に意識せず作成してますが具体的にどういうことでしょうか?同一ホストって同じホスト名という意味ではないですよね・・。 ただ、テキストボックスに入力したIPアドをサーバで受信し、ブラウザにAjaxで”入力されたアドレスは~です”と表示させたりは動作したので単純にXMLHttpRequestは正常に動作していると考えていいものなのでしょうか・・。
お礼
回答ありがとうございます。 自分もPerlのモジュールかApacheの設定が疑わしいと思っているのですがCGI(Perl)はサーバ上で単体で実行すると上手く動作します。 IPアドレスをソースに直接書いて実行するとちゃんとperlモジュールも動作し、期待通りの動作をしてくれます。 Perlへのパスはwhich perlコマンドで表示されるパスを一行目に記載してますので特に問題ないと思います。 URLを参考に勉強してみたいと思います。 親切な対応ありがとうございます。
補足
http://allabout.co.jp/internet/cgiperl/subject/msubsub_330-10.htm←このページを参照し、CGIのエラーをブラウザに表示させてみたら"icmp ping requires root privilege "と表示されました。 ちょっと調べてみたらNet::Pingはroot権限が必要とのことです..。 CGIでNet::Pingは使用できないものなのでしょうか・・ 今回はAjaxは特に問題なかったようです。