痔になりやすい生活習慣とは?

javascriptの中で、perlのコマンドを実行できないか。

java:クライアント側の処理。
perl(cgi):サーバ側の処理。
なので、愚問かもしれないのですが、

↓======================================
<script language="JavaScript">
<!--
function aaa(){

 :

EOM

(この間に、perlの処理)

print <<EOM;



}
// -->
</script>
↑======================================

と言った感じで、javascriptのfuncitonの中で、
perlを使って、データベースへの操作をしたいのですが、
やはり、無理でしょうか。
あるいは、代案などあればご教授願えませんでしょうか。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

Sjaxを使う手もアリかと思います


昔作った実験コードです。
hello.cgiは自分で適当に作ってください
また、hello.cgiはべつにCGIでなくてもPHPでもOKです。
ロード時に実行するパターンとボタンクリックのイベント駆動のパターンを入れときました。
なんかずっと前にもこんな質問があったような気が・・・
--------------------------------------------------------
<html>
<head>
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>サンプル</title>
<script language="javascript">
<!--
// -------------------------------------
// -------------------------------------
function fCall(){
var xObj = createHTTPRequest();
var fName = "http://www.hogehoge.jp/hello.cgi";
var oText = document.getElementById("Disp01");
xObj.open("GET", fName, false);
xObj.send(null);
oText.innerHTML = xObj.responseText;
}

function fCall2(){
var xObj = createHTTPRequest();
var fName = "http://www.hogehoge.jp/hello.cgi";
xObj.open("GET", fName, false);
xObj.send(null);
var sSTR = xObj.responseText;
document.write(sSTR);
}
// -------------------------------------
function createHTTPRequest(){
if(window.ActiveXObject && !window.XMLHttpRequest){
try{
return (new ActiveXObject('Msxml2.XMLHTTP'));
}catch (e) {}
try{
retrurn (new ActiveXObject('Microsoft.XMLHTTP'));
}catch (e) {}
return (null);
}else if(window.XMLHttpRequest){
return (new XMLHttpRequest);
}else{
return null;
}
}
//-->
</script>

</head>
<body>
<p>サンプル</p>
<p id="Disp01"> </p>
<p><input type="button" value="ボタン" name="B3" onClick="fCall()"></p>
<script language="javascript">
<!--
fCall2();
//-->
</script>
</body>
</html>
--------------------------------------------------------
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

大変、詳細なソースの記述までいただき、感謝申し上げます。
これは、
「functionの中から、cgiファイル(hello.cgi)をopen(実行)させる」
という理解でよろしいのでしょうか。
早速、試してみたいと思います。
いずれにせよ、まだ私には初めて見るコマンドもあり、
少しずつ勉強していきたいと思います。
本当にご丁寧にありがとうございました。

お礼日時:2010/07/06 16:02

キーワードは「Ajax」です。



JavaScriptはクライアント側、Perl CGI はサーバ側の処理ですから、
クライアント側のJavaScriptプログラム中に単純にperlスクリプトを埋め込むことは出来ません。
クライアントからはサーバへ処理リクエストを送り、
それを受け取ったサーバ側で処理を実行する、という流れになります。

そのような仕組みは、一般的には「Ajax」などと呼ばれていますので、
Ajax について勉強してください。

http://ja.wikipedia.org/wiki/Ajax

素のJavaScript でリクエスト処理を記述するのはかなり面倒ですので、
prototype.js や jQuery といった JavaScript ライブラリを使うのが楽だと思います。

prototype.js : http://javascriptist.net/ref_prototype/ajax.requ …
jQuery: http://semooh.jp/jquery/api/ajax/jQuery.ajax/opt …

これらのAjax補助関数を使い、クライアント側では、希望の処理に必要な情報を引数に付けて、バックグランドでCGIを呼び出します。

サーバ側では、希望の処理に対応するCGIを新設することになります。。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

以前もここ(教えてgoo)で、(別件で)ajaxの活用をアドバイスをいただいたのですが、
私には、少々難しく、未だ勉強できていません。

しかしながら、
このたびも、ajaxでの対応を進めていただいたことでもあり、
少しがんばって勉強してみます。
ありがとうございました。

お礼日時:2010/07/06 13:50

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QHTML上(javascript)からCGIを実行する方法

javascriptから外部実行ファイル(javascriptファイルではなくperlなどのCGI)
を実行する方法を探しています。
下記のようにindex.htmとtest.cgiファイルを用意して、index.htm内の
javascriptから外部cgiを実行させ、cgiの結果(test.cgiでは単に
『test』と表示するのみ)を表示したいと考えています。

利用増ですが、cgiやssiが使用できないサーバにindex.htmを置いて、
cgiが使用できるサーバ上のcgi結果を取得したいものです。
通常のcgiのように、1ページでcgi結果を表示するものではなく、
HTMLファイルの一部にcgi処理結果を表示させたいものです。

そもそも、SSIを使用しなければ下記のようなHTML内にcgiなどの
実行結果を表示する事は出来ないのでしょうか。
よろしくお願い致します。

※下例のプログラムではcgi結果は表示されませんでした・・・。

---<index.htm>----------------------------------------
<HTML>
<BODY>
<SCRIPT language="Javascript" src="http://xxx.xxx.xxx.xxx/test.cgi"></SCRIPT>
</BODY>
</HTML>

---<test.cgi>----------------------------------------
#!/usr/bin/perl

print "test"

javascriptから外部実行ファイル(javascriptファイルではなくperlなどのCGI)
を実行する方法を探しています。
下記のようにindex.htmとtest.cgiファイルを用意して、index.htm内の
javascriptから外部cgiを実行させ、cgiの結果(test.cgiでは単に
『test』と表示するのみ)を表示したいと考えています。

利用増ですが、cgiやssiが使用できないサーバにindex.htmを置いて、
cgiが使用できるサーバ上のcgi結果を取得したいものです。
通常のcgiのように、1ページでcgi結果を表示するものではなく、
HTML...続きを読む

Aベストアンサー

「Google AdSense」のjavascriptでは#1さんの回答にもありますがiframeを使用するような仕掛けになっているようです。
・javascriptでiframeを展開。
・iframeのsrcでcgiを指定。

>外部cgiでjavascriptを生成する仕組みを作り、その生成されたjavascriptを参照するという間接的な仕組みを設ければ可能になる
そういう仕組みも可能です。
また、直接的に<script type="text/javascript" src="xxxx.cgi"></script>
こういう書き方も可能です。
※xxxx.cgiでは処理結果をjavascriptのコードとして
print "Content-Type: application/x-javascript\n\n";
print "document.write('xxxx');";
みたいにして吐き出す必要があります。

QJavaScriptでPerlのサブルーチンを呼び出すには?

JavaScriptでPerlのサブルーチンを呼び出すことはできますか。

#Perl
Sub Func_a(){ ...
}

この Func_a 関数をJavaScriptから呼び出したいのです。

Aベストアンサー

perl.exeとperlのサブルーチンが格納されたファイルはクライアント側に置くとして、
結果をファイルでどこかにおいておくようにするのならできます。
WShell(WScript/CScript)を使えばよいのです。

ちなみに、サーバにあるperlサブルーチンを呼び出すってのは、単にCGIを動かしているだけになるとおもいますが?

Qボタンの処理

ボタンをクリックしたら指定されたサブルーチンの処理をするようなプログラムを作ろうとしているのですができません。submitではなくbuttonでやりたいのですが無理でしょうか?分かる方がいらっしゃいましたらよろしくお願いします。

Aベストアンサー

#1です。

これはPerlというよりもHTMLやJavaScriptのお話になりますが、
<button value="削除" name="hoge" onClick="delete()">
とした場合、「ボタンを押したらJavaScriptのdelete()関数を呼び出す」といった意味になります。
mizumaki22さんの組んだソース内に「function delete()」があればそれが呼ばれますが、無ければそこでエラーが発生するでしょう。
これは全てクライアント側で行われる作業であり、Webサーバ側では関知しません。

引き換え、Perlを動かす為にはサーバにアクセスして.cgiファイルを呼ばなければなりません。
そして.cgiファイルが呼ばれた際にWebサーバが内部的に処理を行い、その結果をクライアントに返します。
その為に一般的に使用されるのが<form action="hoge.cgi">といった記述です。
そうして<form>に記述された.cgiファイルを呼ぶには、<form>に対して"submit"を送らなければなりません。
その為に使用するのが<input type="submit" value="削除">といったような記述です。

mizumaki22さんのご質問の場合、この<input type="submit">を使わず<input type="button">で同じような動作をさせたいのかな?と読み取れました。
その場合には<input type="button">を押されたタイミングで"submit"を送ってやる必要があります。
それが#1で書いた<input type="button" onClick="submit()">の意味です。

前置きが長くなりましたが、直し方について・・といっても、もうほとんど書いてしまいましたが。(^_^;
mizumaki22さんの補足してくだっさったソースを見ると、CGI.pmというやつでしょうか。(正直、この辺りには余り詳しく無いのですが。)
> print button(-value=>"削除",-name=>"$link2",-onclick=>"delete()");
見たところ、この記述だと<input type="button" value="削除" name="hoge" onClick="delete()">というHTMLに出力されるように見受けられます。
これが<input type="button" value="削除" name="hoge" onClick="submit()">とHTML出力されれば動くと思われますので、
> print button(-value=>"削除",-name=>"$link2",-onclick=>"submit()");
でよろしいかと思われます。

#1です。

これはPerlというよりもHTMLやJavaScriptのお話になりますが、
<button value="削除" name="hoge" onClick="delete()">
とした場合、「ボタンを押したらJavaScriptのdelete()関数を呼び出す」といった意味になります。
mizumaki22さんの組んだソース内に「function delete()」があればそれが呼ばれますが、無ければそこでエラーが発生するでしょう。
これは全てクライアント側で行われる作業であり、Webサーバ側では関知しません。

引き換え、Perlを動かす為にはサーバにアクセスして.cgiファ...続きを読む

Q別ファイルのfunctionの読み込み方

こんにちは
外部ファイル hello.js
-----------------------------
function aisatsu(){
var aa="hello"
}
-----------------------------
というファイルが存在した時にjikkou.htmlでaaの値、”hello”を呼び込みたい場合はどう記述すればよいのでしょうか?htmlのなかでaisatsu()をどこに記述していいのか分かりません。どうか教えてください。ただ、hello.jsのほうは実際の記述を簡略化したものであるのでそちらのほうはいじれません。

宜しくお願いします。

必要ないかもしれませんが、念のために私が最初に書いたhtmlの文です(もちろん実行できませんでした)
------------------------------------
<html>
<script language="javascript" src="hello.js">
aisatsu(){
document.write(aa);
}
</script></html>
------------------------------------

こんにちは
外部ファイル hello.js
-----------------------------
function aisatsu(){
var aa="hello"
}
-----------------------------
というファイルが存在した時にjikkou.htmlでaaの値、”hello”を呼び込みたい場合はどう記述すればよいのでしょうか?htmlのなかでaisatsu()をどこに記述していいのか分かりません。どうか教えてください。ただ、hello.jsのほうは実際の記述を簡略化したものであるのでそちらのほうはいじれません。

宜しくお願いします。

必要ないかもしれませんが、念のために...続きを読む

Aベストアンサー

function内で「var」をつけて変数を宣言するとfunction外からその変数の内容を取得することができなくなります。(returnで参照することはできます。)
なので変数の内容を取得する場合は「hello.js」の内容を

function aisatsu(){
var aa="hello";
return aa;
}

このように修正し、

<script language="javascript" src="hello.js"></script>
<script language="javascript">
var data=aisatsu();//「aisatsu()」関数の「aa」変数内のデータを引っ張り出す(return aa;)
document.write(data);//書いたり
alert(data);//アラートしたり
window.status=data;//ステータスバーに表示したり・・
</script>

QHTMLファイル同士での値渡し

困っています。

HTMLファイルからHTMLファイルへ移動するときに、
HTMLファイル1でJavaScript で算出された値を
HTMLファイル2へ渡して使用したいのです。

showModalDialogだとダイアログにしか渡せないし・・・。
このように、値をそのまま次のページに渡すための方法を教えてください。
お願いします。

Aベストアンサー

すみません。うっかりしてました。

document.write(FORM[v1]);
では、v1を変数と認識してしまうので、エラーになってしまいますね。

document.write(FORM.v1);  // 「FORM.v1」です
あるいは
document.write(FORM["v1"]);
としてください。

QCGIのPerlの変数をJavaScriptの変数に使えますか

CGIのPerlの変数をJavaScriptの変数に使えますか
使い方お願いします。

Aベストアンサー

もうちょっと具体的にどうしたいのか教えてください。

PerlにJavaScrptを書き出させればPerl側で使っている変数の値(あくまで値)をJavaScriptに渡すことはできますけど。

QOnclickイベントでデータをcgiに受け渡す方法はありますか?

Onclickイベントでデータをcgiに受け渡す方法はありますか?

Aベストアンサー

<form action="渡したいcgiファイル">を指定して、
onClick=submit();
でもできると思いますけど、functionを別に記述して、
onClick=function名
別なところに
<script language="JavaScript">
funciont function名(){
document.form名.submit();
}
</script>
を書いてあれば、指定のcgiにフォームの内容(値)が渡されますよ。
これじゃダメでしょうか?

Qチェックボックスのperlでの値の渡し方

perlに限らず、CGIもJavascriptも初心者なのにHPでアンケートを作ろうとしている者です。機能はアンケートの末尾の「確認」を押すとCGIの“確認画面”が表示され、その後「送信」で記述内容がメール送信されるというものです。複数回答があるチェックボックスのperlでの値の渡し方を教えてください。症状として以下の様に記述した場合、AとCにチェックをすると「C」しか受け取れません。ちなみにチェックボックスに規定以上の数(例えば「最大2つまで回答可」みたいな)がチェックされたら瞬時にアラートが出るようにするJavascriptを使っていますので“name”は同一にしたいのですが。
★CGIの記述 → $FORM{'test'}
★HTMLの記述↓
<INPUT type="checkbox" name="test" value="A">A
<INPUT type="checkbox" name="test" value="B">B<INPUT type="checkbox" name="test" value="C">C
「配列変数」とやらが必要らしいのですが、どんな記述にすれば良いのかサッパリです。

perlに限らず、CGIもJavascriptも初心者なのにHPでアンケートを作ろうとしている者です。機能はアンケートの末尾の「確認」を押すとCGIの“確認画面”が表示され、その後「送信」で記述内容がメール送信されるというものです。複数回答があるチェックボックスのperlでの値の渡し方を教えてください。症状として以下の様に記述した場合、AとCにチェックをすると「C」しか受け取れません。ちなみにチェックボックスに規定以上の数(例えば「最大2つまで回答可」みたいな)がチェックされたら瞬時にアラートが出る...続きを読む

Aベストアンサー

$valueへの値のセット方法は?

つまり、どうやってチェックボックスの値の取得をやっているのでしょうか?

このスクリプトはゼロから自分で作っているのですか?
それとも元になるスクリプトがあるのでしょうか?

配列変数とかの前に、フォームからどのようにCGIスクリプトが値を受け取っているのか?が問題です。

QリロードができるCGIないですか?

ページにアクセスすると同時にリロードをするようにするCGIはありませんか?

日記を管理人ページから書き込んだ後に、他の人がそれを見るときに、
いちいちリロードをしなければ、新着日記が更新されないので、
そういうCGIをcgiファイルで生成されるHTMLファイルに
組み込みたいと考えています。

なにかよい案に心当たりのある方がいらっしゃいましたら、
ぜひ教えてください。

Aベストアンサー

記述した内容が投稿されなかったので再度、記述します。(最終的に2重に投稿された場合は、申し訳ありません)
CGI自体がどうのようになっているのわかりませんが、以下のタグを追加すれば可能です。(実際、掲示板や日記で最新の情報が表示されます。)

・i-mode/Vodafone Liveの場合
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
・EZweb(WAP2.0用 WINやA11xx,A3xxx,A5xxx)
<meta http-equiv="Cache-Control" content="no-cache" />
・EZweb(WAP1.x用 TU-KAやCxxx,A10xx)
<HDML version="3.0" markable="true" ttl="0">
↑この場合だけ、<HDML>タグ内にttl="0"を追加すれば可能です。
他は、タグを追加です。
以上で、必ずキャッシュからデータを読むことなく必ず、サーバからデータをとりなおします。
万一、上記の方法でうまくいかない場合は、CGIプログラム内で、起動する際、単にxxx.cgiではなく、xxx.cgi?tm=$tm など必ず同じにならない値で起動する方法があります。
起動する絶対時間などを入れて起動すると全く同じアドレスとならないので必ず読み直しを行うようになります。(こちらも実績があります。)
質問の目的と違っていたらすみません。

記述した内容が投稿されなかったので再度、記述します。(最終的に2重に投稿された場合は、申し訳ありません)
CGI自体がどうのようになっているのわかりませんが、以下のタグを追加すれば可能です。(実際、掲示板や日記で最新の情報が表示されます。)

・i-mode/Vodafone Liveの場合
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
・EZweb(WAP2.0用 WINやA11xx,A3xxx,A5xxx)
<meta http-equiv="Cache-Control" content="no-cache" />
・EZweb(WAP1.x用 TU-KAやCxxx,A10xx)
<HDML version="3.0...続きを読む

QJavaScriptでcgiの戻り値を受け取るには?

JavaScriptの関数内でcgiを実行(submit)しています。
そのcgiの実行結果(cgiで記述しているexit 0などの0)を受け取る方法を教えてください。

受け取った値によって、alertでメッセージを表示させたいです。
cgiの実行からalertでメッセージを表示させるまでの処理を
JavaScriptの1つの関数内で行いたいです。

よろしくお願いいたします。

Aベストアンサー

いわゆる「Ajax」で調べてみてください。
一般的には非同期通信を行いますが、同期通信なら1つの関数内で出来ます。
「ajax 同期通信」「ajax 同期モード」こんな感じのキーワードでいいと思います。
サンプルは検索すれば何種類か出てくると思いますのでそれを見てください。
(種類が少ないのは、他に書き方がないため。使用しているライブラリの違い。)

ただし、exit 0の0を受け取ることは出来ません。
これはCGIアプリケーションからOSに返される値であり、クライアントへは返されません。(CGIアプリケーションにとっての標準出力から出力されません。)
これをJavaScriptで受け取るには、CGIアプリケーションがexit 0する前にそれと同じ値を標準出力に出力する必要があります。

以下、PerlのCGIスクリプトの例(exit部分)

if($isError){
print '1';
exit 1;
}
print '0';
exit 0;


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング