• ベストアンサー

JavaScriptからphp関数の呼び出し

javaScriptで1秒毎にphpの関数を呼び出しているのですが、 php側で、returnしている日時が動的に表示されません。 何がいけないのか教えて頂けますでしょうか? 色んな参考ページを見ると、phpの関数で動的に 動かせると書いてあるのですが、動的になりません。 -------------------------------------------------------- <jsphptest.htmlソース> <html> <head> <script type="text/javascript"src="jsphptest.php"></script> <script language="javascript"> <!-- function time() { //JavaScriptで日時表示 var now = new Date(); mon = now.getMonth()+1; day = now.getDate(); hou = now.getHours(); min = now.getMinutes(); sec = now.getSeconds(); year = now.getYear(); if (year < 2000) { year += 1900; } if (mon <= "9"){mon = "0" + mon;}; if (day <= "9"){day = "0" + day;}; if (hou <= "9"){hou = "0" + hou;}; if (min <= "9"){min = "0" + min;}; if (sec <= "9"){sec = "0" + sec;}; document.form1.j_tokei.value= year +"/"+ mon +"/"+ day +" "+ hou +":"+ min +":"+ sec; //PHP関数の呼び出し document.form1.p_tokei.value= php_time(); //1秒毎 setTimeout('time()',1000); } // --> </script> </head> <body onLoad="time();"> <form name="form1" mathod=post> JavaScript日時<input type="text" name="j_tokei" size=25><br> PHP日時<input type="text" name="p_tokei" size=25> </form> </body> </html> -------------------------------------------------------- <jsphptest.phpソース> <?php $str .= "function php_time(){"; $str .= "return('".date('Y-m-d H:i:s')."');"; $str .= "}"; echo $str; ?>

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

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.7

#1です。 以前、回答したものの使いまわしですみません。 http://questionbox.jp.msn.com/qa5641178.html Ajaxライブラリ prototype.js を別途 ご用意ください。 ​http://www.prototypejs.org/download

mintohime
質問者

お礼

何度も本当にありがとうございます。 教えて頂いた方法で実現出来そうです。 ajaxも、これからは必要ですね。 本当に感謝です。

その他の回答 (7)

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.8

ごふっ #6です。 >#1です。 間違えました。#2,#3でした。。。orz

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.6

ご提示のソースだと、サーバ側の時刻と、クライアント側の時刻を比較表示するようにはなっているのですが、有効なのは最初だけで、以降はクライアント側の時刻だけ進むようになっています。 setTimeoutで1秒ごとに呼び出している関数で、phpからの情報を取得していませんよね? 既回答者様達が回答されているように、その中で呼び出している、php_time();はソースのロード時に一度実行されて、その時に返されたサーバ側の時刻を保持したまま、後は呼び出される毎にその同じ時刻を返すだけだからです。(オンタイムな時刻を取得してはいません。) 呼び出す毎にサーバ側の時刻を取得したいのであれば、その都度サーバと送受信する必要があります。 でも、1秒のカウントにはクライアント側もサーバ側もそれほど差はないと思いますので、最初に一度比較するだけで十分ではないかと思われますが? (トラフィック軽減の意味もあります。) サーバ側の時刻が正確であったとしても、通信のための誤差がありますし、ご提示のソースだとHTMLの読み込みとDOM構築までの時間も加算されます。(ソースが複雑だと時間差が増す) 最初に、サーバ側の時間をもっと詳しく(1秒単位ではなく)取得しておいて、ロード後の経過時間はクライアント側のクロックで加算して、両方の時刻表示を動かすというのではダメなのでしょうか?(目的が不明なのでわかりませんが) どうしても毎回サーバの時刻を取得したいのであれば、「ajax」あたりをキーにぐぐってみるのがよろしいかと…

mintohime
質問者

お礼

詳しくご説明頂きありがとうございます。 やはり、ajaxですよね。 昨日から徹夜で、ajaxについて調べて見ましたが、どうにも難しく 理解するまでに時間がかかりそうです。 時刻に関しては、ご説明頂いた通り、初回の読み込みで対応したいと 思います。 他にやりたかった事は、数秒毎に ページを遷移せずに、 DB(mysql)にアクセスして、抽出データを、ページの各項目に 表示したいのです。 しかし、サーバーの負荷も考えて、submitボタンを設置して、 ボタン押下で、上記を実現させようとしたのですが、 ajaxではないと無理みたいですね。 分かりやすいサンプルなど、ご存じでしたら教えて頂けると幸いです。 まだ初心者で、なかなか理解するのに時間がかかっていて、 丁寧に説明頂き、本当に感謝しています。 ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

非同期で定期的にサーバーにデータを取りに行きたいなら ajaxを使います。

  • momom0
  • ベストアンサー率16% (4/24)
回答No.4

そのphpソースは、Javascriptのテキストを出力してます。 php関数の呼び出し、と思ってるようですが、 javascriptから、phpが書いたjavascriptを実行しているだけですね。

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.3

#2です。 ほんの数分の間の追記で申し訳ありません。 > <script type="text/javascript"src="jsphptest.php"></script> ↑この場所に、↓これを読み込んだだけって事です。 function php_time(){ return('2010-02-05 04:00:00'); } んー、やっぱ 説明下手だ。俺。。。orz

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.2

簡単に説明しますね。 > <script type="text/javascript"src="jsphptest.php"></script> ↑ で、PHPスクリプトが読み込まれるのは、一回だけです。 具体的に書くと、↓このテキストが1回だけ読み込まれて、それを一秒ごとにJavaScriptとして実行しているだけです。 function php_time(){ return('2010-02-05 04:00:00'); PHPスクリプトのほうには読み込みに行ってませんので、 当然 同じ時間しか表示されないって言う寸法です。 んー、正直、この説明で ちゃんと伝わるか自信がありません。 誰か 分かりやすい 説明お願いします。。

mintohime
質問者

お礼

なるほど!そう言う事ですか、良く分かりました。 しっかり伝わりました。ありがとうございます。 では、こういう風に毎回読みに行きたい時は どうすればいいんでしょうか? JavaScriptとphpだけでは、不可能と言う事でしょうか? 可能ならば、どのように記述したら良いか教えて頂けますか? 追加の質問ですみませんが、何とぞ宜しくお願い致します。

noname#119957
noname#119957
回答No.1

とりあえず、以下に間違いありますね。 <body onLoad="time();"> <form name="form1" mathod=post> JavaScript日時<input type="text" name="j_tokei" size=25><br> PHP日時<input type="text" name="p_tokei" size=25> </form> </body> ** ※ method="post" <label>JavaScript日時</label>

関連するQ&A

  • javascriptの関数につきまして

    javascriptの関数につきまして javascriptの関数につきましての質問です。 Daycheck()関数 function Daycheck(year, mon, day){ maxDayOfMonth = Array( 31,29,31,30,31,30,31,31,30,31,30,31 ); if (year < 1901 || 2200 < year) return false; if( mon < 1 || mon > 12 ) return false; if( day < 1 || day > maxDayOfMonth[mon-1] ) return false; if( mon != 2 ) return true; if( day < 29 ) return true; if( ( year % 4 ) == 0 && ( year % 100 ) != 0 ) return true; if( ( year % 400 ) == 0 ) return true; return false; } というサンプルソースを見たのですが、Daycheck()の中のif( mon != 2 ) return true;とは2月以外が選択されていた場合trueを返す。 つまり、2月は選択できないということでしょうか? プログラミングについて詳しい方がいらっしゃりましたらご指導お願いします。 宜しくお願い致します。

  • <SCRIPT type="text/javascript">

    <SCRIPT type="text/javascript"> <!-- function Watch() { now = new Date(); year = now.getYear(); month = now.getMonth()+1; day = now.getDate(); hour = now.getHours(); minute = now.getMinutes(); second = now.getSeconds(); if (year < 1000) { year += 1900 } if (hour < 10) { hour = '0' + hour } if (minute < 10) { minute = '0' + minute } if (second < 10) { second = '0' + second } document.form.watch.value = year+'年' + month + '月' + day + '日 ' + hour + ':' + minute + ':' + second; setTimeout("Watch()",1000); } document.write('<FORM name=form><INPUT name=watch size=27></FORM>'); Watch(); //--> </SCRIPT> の意味を詳しく説明してください。 あと、scriptでカウントダウンの作りかたを教えてください。 ようするに、999から998、997えとカウントダウンするという意味です。 だれか教えてください。かなり詳しく小学生でもわかるように超めっちゃ詳しく教えてください。 お願いします。 ほんと詳しくお願いします。できるだけ早くお願いします。 このscriptの中身を詳しくお願いします。あと、 <script type="text/JavaScript">を小学生でもわかるほど詳しく書いてあるサイトがあれば教えて ください。 ※JavaScriptでランダムRPGゲームを作る は知っているのでもっと詳しく説明してあるサイトを教えてください。

  • 「誕生日まであと○日です」

    <html> <head> <title>test</title> </head> <body> <SCRIPT LANGUAGE="javascript" TYPE="text/javascript"> <!-- var weeks = new Array('日','月','火','水','木','金','土'); var now = new Date(); var year = now.getYear(); // 年 var month = now.getMonth() + 1; // 月 var day = now.getDate(); // 日 var week = weeks[ now.getDay() ]; // 曜日 var hour = now.getHours(); // 時 var min = now.getMinutes(); // 分 var sec = now.getSeconds(); // 秒 if(year < 2000) { year += 1900; } // 数値が1桁の場合、頭に0を付けて2桁で表示する指定 if(month < 10) { month = "0" + month; } if(day < 10) { day = "0" + day; } if(hour < 10) { hour = "0" + hour; } if(min < 10) { min = "0" + min; } if(sec < 10) { sec = "0" + sec; } document.write('今日:' + year + '年' + month + '月' + day + '日'); // --> </SCRIPT> </body> </html> これで今日の日付けは表示できたのですが 誕生日が7/31なのですが document.writeで 「誕生日まであと○日です」 と表示するにはどうすれば良いでしょうか?

    • ベストアンサー
    • HTML
  • javascriptからphpの呼び出し

    javascriptの初心者です。宜しくお願い致します。 php5で、開発していますが、javascriptからphpを呼んで、 結果をリアルタイムに画面に表示させる方法が分かりません。 【やりたい事】 1.画面上に、現在の日時を表示させる。 2.5秒毎に、phpを呼び出し(DB接続し結果を取得)して、   その結果を、画面上に表示させる。   ※DBへの接続は、javascript内ではやりたくありません。 下記に、現在時刻を表示するjavascriptがありますが、 この中で、5秒毎に、phpを呼び出したいのですが、 出来るのでしょうか? </head> <script language="Javascript"> <!-- function time_disp() { d = new Date(); document.all.nowdate.value = d.toLocaleString(); window.setTimeout("time_disp()", 1000); } --> </script> <body onload="time_disp();"> <input type="text" name="nowdate" size="30" readonly> <input type="text" name="data1" readonly> ←phpから取得した値1 <input type="text" name="data2" readonly> ←phpから取得した値2 </body>

  • JavaScriptでdocument.fileCreatedDate

    JavaScriptでdocument.fileCreatedDateを使おうとして <script type="text/javascript"> <!-- var date = new Date(document.fileCreatedDate); var year = date.getYear(); var month = date.getMonth() + 1; var day = date.getDate(); var hour = date.getHours(); var min = date.getMinutes(); if(year < 2000){year += 1900;} if(month < 10){month = "0" +month;} if(day < 10){day = "0" + day;} if(hour < 10){hour = "0" + hour;} if(min < 10){min = "0" + min;} document.write("作成日:" + year + "年" + month + "月" + day + "日" + hour + "時" + min + "分" + "<BR>"); //--> </script> のようなスクリプトを作ったんですが表示がおかしくなります。 Google chromeでも正常に表示できるようにしたいです。 よろしくおねがいします。

  • ローカルだと改行されるのに、サーバーにアップすると半角・が…

    ローカルでテストすると、きちんとログファイルに改行と認識され、 NAME=***&……TIME=20040515 NAME=***&……TIME=20040516 のように書き込まれますが、サーバーにアップすると、 NAME=***&……TIME=20040515・NAME=***&……TIME=20040516・ のようになってしまいます。 書き込みは以下のようにしています。 open (FILE2,">>log.log"); @fw = "NAME=$FORM{'NAME'}&…&TIME=$year/$mon/$day $hour:$min:$sec&TIME2=$year$mon$day$hour$min$sec\n"; print FILE2 @fw; close(FILE2); なぜでしょうか? 解決策お願いします(><)

    • ベストアンサー
    • Perl
  • パッケージを利用した際の値に謎が!!

    Perlのパッケージについて質問させてもらいます。 Time::Localを利用して1970年1月1日からの経過秒数を取得しようと考えています。 次の様な記述をして実験したのですが、私が想定している通りの動作になりません。 記述(テスト1) (以下からスクリプト開始) use Time::Local; $year=1970; $mon =1; $mday=1; $hours = 10; $min = 0; $sec = 0; $time = timelocal($sec, $min, $hours, $mday, $mon - 1, $year); print $time; (この1行上の行でスクリプト終了) この場合の$timeは、"3600"という答えを得ました。よって、"0"にするために次の様に スクリプトを書き変えて実験しました。 記述(テスト2) (以下からスクリプト開始) use Time::Local; $year=1970; $mon =1; $mday=1; $hours = 9; $min = 0; $sec = 0; $time = timelocal($sec, $min, $hours, $mday, $mon - 1, $year); print $time; (この1行上の行でスクリプト終了) この場合の$timeは、"-3600"という答えを得ました。 なんか変ですね。"0"の答えを得るためにはどうすればよいのでしょうか? よろしくお願いします。

  • setTimeout()が使えない

    今、JavaScriptでリアルタイムで動く時計を作ってるのですが、setTimeoutが動かないため使えません。 時刻は表示するのですが、自動更新してくれません。 JavaScriptのサイトの時計は動いているんですけど、自分の作ったのだと動いてくれません。 ---- function Clock() { dd = new Date(); Year = dd.getFullYear(); Mon = dd.getMonth()+1; Date = dd.getDate(); Days = new Array("日","月","火","水","木","金","土"); Day = Days[dd.getDay()]; AMPM = ""; Hour = dd.getHours(); Min = dd.getMinutes(); Sec = dd.getSeconds(); if (Hour > 12) { Hour = dd.getHours()-12; AMPM = "午後"; } else { AMPM = "午前"; } if (Hour < 10) Hour = "0"+Hour; if (Min < 10) Min = "0"+Min; if (Sec < 10) Sec = "0"+Sec; document.myForm.Time.value = Year+"年"+Mon+"月"+Date+"日("+Day+") "+AP+Hour+"時"+Min+"分"+Sec+"秒"; setTimeout("Clock()", 1000); } ---- 「<body onLoad="Clock()">」はしています。

  • JAVASCRIPT

    JAVASCRIPT内にwindow.confirmの中にPHPを入れたい。どうしたらいいでしょうか? <script> function onClickSave() { if(document.form.reportValidity() && window.confirm('<?php echo $PASSSWRD_CHANGE[STR_PASSWD_UPDATE] ?>)'){ document.form.submit(); } } </script>

  • javascriptで質問

    javascript初心者です。 日付で自動的に変わるようなメニューが作りたいのですが もっとシンプルに簡潔にできますか? また、開いているページのタブの色を他と変えたいのですができますか? 以下ソース↓ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>スクリプトテスト</title> <style type="text/css"> .menu li{ list-style-type:none; float:left; border:solid 1px #666666; } .menu li a{ padding:5px; background:#eeeeee; display:block; } .menu li a:hover{ background:#ffffff; } </style> <script type="text/javascript"> <!-- var day01 = new Date(); var year01 = day01.getFullYear(); //年 var mon01 = day01.getMonth() + 1; //月 var date01 = day01.getDate(); //日 var day02 = new Date(); day02.setDate( day02.getDate()+1 ); var year02 = day02.getFullYear(); //年 var mon02 = day02.getMonth() + 1; //月 var date02 = day02.getDate(); //日 var day03 = new Date(); day03.setDate( day03.getDate()+2 ); var year03 = day03.getFullYear(); //年 var mon03 = day03.getMonth() + 1; //月 var date03 = day03.getDate(); //日 var day04 = new Date(); day04.setDate( day04.getDate()+3 ); var year04 = day04.getFullYear(); //年 var mon04 = day04.getMonth() + 1; //月 var date04 = day04.getDate(); //日 var day05 = new Date(); day05.setDate( day05.getDate()+4 ); var year05 = day05.getFullYear(); //年 var mon05 = day05.getMonth() + 1; //月 var date05 = day05.getDate(); //日 var day06 = new Date(); day06.setDate( day06.getDate()+5 ); var year06 = day06.getFullYear(); //年 var mon06 = day06.getMonth() + 1; //月 var date06 = day06.getDate(); //日 var day07 = new Date(); day07.setDate( day07.getDate()+6 ); var year07 = day07.getFullYear(); //年 var mon07 = day07.getMonth() + 1; //月 var date07 = day07.getDate(); //日 // --> </script> </head> <body> <ul class="menu"> <script type="text/javascript"> <!-- document.write('<li><a href="'+year01+mon01+date01+'.html">'+mon01+'月'+date01+'日'+'</a></li>'); //--> </script> <script type="text/javascript"> <!-- document.write('<li><a href="'+year02+mon02+date02+'.html">'+mon02+'月'+date02+'日'+'</a></li>'); //--> </script> <script type="text/javascript"> <!-- document.write('<li><a href="'+year03+mon03+date03+'.html">'+mon03+'月'+date03+'日'+'</a></li>'); //--> </script> <script type="text/javascript"> <!-- document.write('<li><a href="'+year04+mon04+date04+'.html">'+mon04+'月'+date04+'日'+'</a></li>'); //--> </script> <script type="text/javascript"> <!-- document.write('<li><a href="'+year05+mon05+date05+'.html">'+mon05+'月'+date05+'日'+'</a></li>'); //--> </script> <script type="text/javascript"> <!-- document.write('<li><a href="'+year06+mon06+date06+'.html">'+mon06+'月'+date06+'日'+'</a></li>'); //--> </script> <script type="text/javascript"> <!-- document.write('<li><a href="'+year07+mon07+date07+'.html">'+mon07+'月'+date07+'日'+'</a></li>'); //--> </script> </ul> </body> </html>

専門家に質問してみよう