• ベストアンサー

Onclickイベントで実行されるユーザー定義関数の実行を直接サーバーに命じることはできないでしょうか。

javascriptの素人なので仕組みを勘違いしているかもしれませんが,  Onclick=My_func(引数1)という記述があったとして、この意味は、(ボタンとかが)クリックされたら、My_func(引数)をサーバー側で実行するという意味ですよね。 それなら、Webサーバーに「My_func(引数1)を実行せよ」というコマンドを送るのと同等という理解でよろしいですか。 この推測が正しいとして、 1.「My_func(引数)を実行せよ」という命令はどのようなメソッドを使って送ればよいのでしょうか(WebBrowserコントロールのNavigateのPostdataを使うのでしょうか?)。 2.送り先URLはそのページが表示されているアドレスでよいのでしょうか。それとも、別の送り先の可能性もあるのでしょうか。

  • phy0
  • お礼率76% (148/193)

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

  • ベストアンサー
  • edomin
  • ベストアンサー率32% (327/1003)
回答No.2

#1です。 「「クライアントでMy_func(引数)が実行されました。」という情報がサーバーに送られる」 この情報もサーバには送信されません。 クライアントから送信しようとする内容だけが送信されます。 なので、クライアントが送信(「次のページへ移る」など)のデータを送らなければ何も送信されません。(基本的に)

phy0
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • NTJ
  • ベストアンサー率44% (46/103)
回答No.3

なんとなく・・・JavaScriptとJavaを混同しているように感じられます。 両者は全くの別物なので、注意してくださいね。(ご存知でしたらすみません) で、JavaScriptは、「ブラウザの機能を動作させるスクリプト言語」です。 従って、JavaScriptの動作は全てブラウザ内に閉じており、JavaScriptの動作中には、サーバーとの交信は行われません。 質問者さんの動作させたい「ユーザー定義関数」は、JavaScriptで記述した関数でしょうか? もしそうであれば、その関数を同じHTML内へ記述するか、外部スクリプト参照でHTML内へ読み込んでおかない限り、処理は動作しない筈です。 例を書きますと・・・ <SCRIPT> function My_func(arg){ alert('引数は'+arg+'です。'); } </SCRIPT> <INPUT type=button onClick="My_func('AAA');" value="AAA"> <INPUT type=button onClick="My_func('BBB');" value="BBB"> こんな具合になります。 上記をテキストエディタで拡張子を.htmlにして、PCに保存してみてください。 PCにWebサーバー機能が全く無くても、想定通りに動作する筈です。 逆に、onClickの先にURLを記述しても、単にスクリプトエラーになるだけです。 つまり・・・JavaScriptはWebサーバーとは無縁の環境で動作しているんです。 どうしてもサーバーに処理をさせたいのであれば、Ajaxの手法が必要になります。

phy0
質問者

お礼

ありがとうございました。 >JavaScriptとJavaを混同しているように感じられます。 混同というより、どちらも良くわかっておりません。勉強になりました。

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.1

基本的に、 「My_func(引数)をサーバー側で実行する」 が違っています。 javascritはあくまでもブラウザをインタープリタのように使用してクライアントで実行されます。 なので、「My_func(引数)」という関数も元の記述ファイルの中に有るはずです。

phy0
質問者

補足

ありがとうございます。 >「My_func(引数)」という関数も元の記述ファイルの中に有るはずです。 ご指摘のとおり、ありました。ということは「クライアントでMy_func(引数)が実行されました。」という情報がサーバーに送られるという理解でよろしいでしょうか。

関連するQ&A

  • onClickで関数呼出し後に、結果に応じてsubmitを実行する方法

    JavaScriptで、 function func() {  if (a==0) {   alert("処理しない");   return false;  }  return true; } と、a=0ならfalseを返し、それ以外ならtrueを返す関数を定義しています。 そして、FORMタグで <FORM NAME="FormName" ACTION="next.html"> <INPUT TYPE="button" VALUE="next" NAME="button1" onClick="return func();submit();"> </FORM> と記述しています。 要は、ボタンを押下した際にfunc関数がtrueを返せば、next.htmlに 遷移させたいのですが、上記記述では、遷移しません・・・ onClick部分にonClick="return func(),submit();"と記述した場合、 func関数の実行結果がtrueでもfalseでも遷移してしまいます。 そこで、なんとなくonClick="return func()&&submit();"と記述してみたところ、 func関数がtrueの時のみうまく遷移するようになりました。 これは偶然そう動作しているのでしょうか、それとも上記は正しい記述方法なのでしょうか? 正しい記述方法ならいいのですが、上記以外に正式な記述方法があれば 教えていただけないでしょうか? ※TYPE="submit"にすればいいとは思うのですが、buttonで実現したいと 考えております。

  • クライアントからサーバーの実行ファイルをサーバー側で実行したい

    サーバーもクライアントもWindowsの環境で、Visual Basic 2005 を使い、クライアントからサーバーにある 実行ファイル(.exe)をサーバー側で実行したい のですが、どうもうまくいきません。shell 関数や Process.Start メソッドを使い、httpプロトコル (http://~)で実行ファイルを指定するようにした のですが、クライアント側で実行しようとします。 また、コマンドライン引数を指定したいです。 もちろん、サーバー側にはWebサーバー(IISのWWW サービス)をインストールしてあります。 UNIX系のrsh(リモートシェル)に相当するような 機能をWindowsでは実現できないのでしょうか? お分かりの方いらっしゃいましたらご教授のほど よろしくお願いします。

  • onclickで別ドメインのphpを実行

    テキストリンクをクリックした時に別ドメインのphpファイルを実行する方法を教えてください。 あるテキストリンクをクリックしたら、そのリンク先に移動するとともに、とあるサーバーにあるphpファイルを実行させたいです。 <a href="http://www.***.com/" onclick="http://www.abc.jp/efg.php">テキストリンク</a> 上記のようにしましたが、phpが実行されませんでした。ネット上でJavascript(ajax)を使った方法などが紹介されていたので試しましたが、やはりphpが実行されませんでした。 具体的なソースを記述した、ご教授を宜しくお願い致します。

  • JavaScriptで関数設定時に引数を指定したい

    状況を説明します ・複数のthにoncklickイベントで同じ関数を呼びたい ・th要素のタグにonclick属性を書くのは同じ記述をたくさん書くことになるのでやりたくない ・JavaScriptでonclick属性に関数を設定したい ・th要素自身を引数としたい ※WindowsXPのIE8で動けばOKです。 (0)ベタ書きするとこんな感じになります。これなら動くことを確認しています。 # <th onclick="func1(this)">… # <th onclick="func1(this)">… # <th onclick="func1(this)">… # <th onclick="func1(this)">… # # function func1(th) { #   … # } (1)引数がなければこんな感じになると思います # var ths = $("head").childNodes; # for (var i = 0; i < ths.length; i++) { #   ths[i].onclick = func1; # } (2)無名関数ならこんな感じになると思います # var ths = $("head").childNodes; # for (var i = 0; i < ths.length; i++) { #   ths[i].onclick = function() { #     … #   } # } しかしこの2つの書き方「(1)(2)」とも、引数を入れようとしたところ どうすればいいかわかりませんでした。 上記の状況を踏まえ… 質問は以下です ・(1)のような書き方で、引数アリの関数を設定する方法 ・(2)のような書き方で、引数アリの関数を無名関数で設定する方法 ・それ以外の代替方法 これを教えてください。 そもそもJavaScriptではできないのであればその旨を教えてください。 よろしくお願いします。

  • [perl]メソッドの引数で受け取った配列データを直接編集したい

    現在、業務でperlプログラムを書いてます。 perlを初めて2か月、プログラムは ほぼ初です。 よろしくおねがいします。 例えば以下のようなコードで、「sub_func」というメソッド内で「main」メソッド内の配列データを直接編集したいのですが、うまくいきません。 これは、引数で渡しているのは配列の「ポインタ」ではなく「リファレンス」であるため、「sub_func」というメソッド内で、新たに「array_ref」という配列の実態を作成してしまっているのだと認識しています。 そのため、「main」メソッドに戻ったタイミングではデータは元に戻ってしまうのだと思っています。 sub sub_func {    my ($self, $array_ref) = @_ ;    $array_ref = [4,5,6];   # returnはせずに、引数で指定したデータに格納したい } sub main {    my ($self) = @_ ;    # メソッドに渡すデータ    my $data = {       array => [1,2,3],    };    my $data2 = [1,2,3];    my @data3 = (1,2,3);    # メソッドの中で、$data->{array}を [4,5,6] に変えたいが・・・    $self->sub_func( $data->{array} );    $self->sub_func( $data2 );    $self->sub_func( \@data3 );    # この時点で、どれも [1,2,3] のまま } 私の認識は間違っているのでしょうか?? また、どのようにすれば配列の要素を別のメソッド内で編集できるのでしょうか?? 御助言をお願いします。

    • ベストアンサー
    • Perl
  • VBAのWebBrowserコントロールで、ページが確実に表示された後に次の作業が行われるようにしたいです。

    宜しくお願い致します。 VBAでWebBrowserコントロールを使用していますが、ページが確実に表示された後に次の作業が行われるようにしたいのですがどのようにしたらよろしいでしょうか? 現状では With ActiveSheet.WebBrowser1 .Navigate url .Document.All.****.Click と記述しております。 上記の状態ですと、"実行時エラー'438' オブジェクトは、このプロパティまたはメソッドをサポートしていません。"と表示され途中で停止してしまいます。 素人なりの予測ですが、このエラーが発生するのはページが表示されきっていないにもかかわらず次の命令を使用としているがためにおきているのではないかと思っております。 ですから、“.Navigate url”の後、ページが表示されきるまで待機するようなプログラムを入れればいいのではと考えてます。 しかし、どのように“画面が表示されるまで待機”という命令を書いたら良いのかが分かりませんので、ご存知の方がおられましたら御教授いただけたらと思っております。 宜しくお願い致します。

  • .NETwebbrowserでダウンロード

    .NETのwebbrowserを使って自動でファイルをダウンロードして 指定の場所に保存したいのですが、ダウンロードリンクが <a href="javascript:void(0);" onclick="sample(1', '0')">1</a>となっていて URLがわからない(ダウンロード画面のURLに直接行くとエラーになる)のですが WebClient等でダウンロード可能でしょうか? navigateでjsを実行すると保存ダイアログが出てしまい そのダイアログを自動で操作する方法がいまいちわからず詰まっております。 どなたかわかる方がいましたら回答お願いいたします。

  • WebBrowser 内のボタンをクリックし、引数を渡したい。

    WebBrowser 内のボタンをクリックし、引数を渡したい。 WebBrowser コントロールを使用していて Windows アプリからページ内のボタンをクリックする方法について質問です。 以下のボタンが html で定義されているとして、 <input type = "button" id = "button1" onclick="javascript:foo();" /> HtmlElement element = null; element = webBrowser1.Document.GetElementById("button1"); element.InvokeMember("click"); こうすると、javascript の foo() が実行されます。 本題はここからなんですが、 この関数fooに引数を渡したいのです! 例えばfooの定義を var foo=function(arg) { alert(arg); } として、アプリ側から、 element.InvokeMember("click","this is test"); のようにすれば動くかと思ったのですが、だめでした。 方法をご存知のかた、ご教授願います!

    • ベストアンサー
    • HTML
  • HTML table内文字のonclick抑止

    HTMLの書き方について質問です。 tableのtdにonclick処理を設定し、 さらに、そのtd内の文字列にもonclick処理を設定したいのですが、 文字列をクリックしたときに、同時にtdに設定したonclick処理も実行されてしまいます。 文字列をクリックしたときは、その文字列に設定してある処理だけ実行するようにはできないのでしょうか? 具体的なサンプルは下記の通りで、 text_funcだけを実行させたいのです。 ---------------------- <html> <head> <script language="JavaScript" type="text/javascript"> <!-- function td_func(){ 折りたたまれている文字を表示する処理; } function text_func(){ TD(セル?)の背景色を変える処理; } //--> </script> </head> <body> <table border="1"> <tr> <td style="padding:10px;" onclick="td_func()"> <a href="#" onClick="text_func();return false;">test_td</a> </td> </tr> </table> </body> </html>

    • ベストアンサー
    • HTML
  • サーバコントロールのコントロールIDをjavaScriptの引数として

    サーバコントロールのコントロールIDをjavaScriptの引数として渡したい <a href="#tab1" id="test" runat="server" onclick="change('test.ClientID');">テスト</a> とした際にサーバコントロールをjavaScriptの引数として渡したいのですが・・・ 書き方がわかりません。 どなたかご指導ご鞭撻下さい。

専門家に質問してみよう