質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ColdFusion

ColdFusionはサーバーサイドの迅速なアプリケーションを開発するためのフレームワークであり、CFMLスクリプト言語を用いて動的なwebサイトの開発を可能とします。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

3回答

1337閲覧

setTimeoutで7秒指定なのに2~3秒でリロードしてしまう

Yoshino.M

総合スコア14

ColdFusion

ColdFusionはサーバーサイドの迅速なアプリケーションを開発するためのフレームワークであり、CFMLスクリプト言語を用いて動的なwebサイトの開発を可能とします。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2018/09/25 04:35

編集2018/09/25 04:50

期待する動作:7秒後に画面遷移

現状の動作:2~3秒でリロードが入る。

以下コメント...

setTimeoutでは7秒を指定。

しかし、2~3秒でリロードが入る。

恐らく、このリロードまでの秒数が定まらないのは、PGを読み込んでいる時間なのだろうか・・・?

色々コード割愛しました

<HTML> <HEAD> <script language="JavaScript"> function myrefresh(_CF_Data) { var LAST = document.frm.LAST.value; document.frm.RANK.value = _CF_Data; if(LAST == 1){ document.frm.method="POST"; document.frm.action="ooo.cfm"; document.frm.submit(); }else{ document.frm.method="POST"; document.frm.action="otitiue.cfm"; document.frm.submit(); } } //1000ミリ秒 * 〇 = 〇秒 setTimeout('myrefresh()', 1000 * 7); </script> </HEAD> <BODY> <CENTER> <cfform name="frm"> <cfoutput> <input type = "hidden" name = "LAST" value = "#LAST#"> <input type = "hidden" name = "RANK" valuye = ""> </cfoutput> <SCRIPT Language="JavaScript">myrefresh('#RANK#');</SCRIPT> </cfform> </CENTER> </BODY> </HTML>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dice142

2018/09/25 04:40

期待する動作はどういうもので、現状の動作はどうなっているのでしょうか?
Yoshino.M

2018/09/25 04:45

期待する動作:7秒後にPOSTとして送信 現状の動作:2~3秒程でリロードしてしまいます・・・
dice142

2018/09/25 04:47

質問文に追記してください。また、ご提示いただいたコードがコードブロックではなくなってしまっているので修正してください。(おそらく最後に```が抜けているのかと)
Yoshino.M

2018/09/25 04:50

色々とダメダメで申し訳ないです...
dice142

2018/09/25 04:52

質問文の修正ありがとうございます。ひとまず気になる点を回答してみます。
guest

回答3

0

ベストアンサー

<SCRIPT Language="JavaScript">myrefresh('#RANK#');</SCRIPT>

があるので、setTimeoutを待つまでもなく、即時submitしていませんか?

投稿2018/09/25 05:12

yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

coldfusionですかね?
まだ、現役なんですね!

と、関係ない話は置いておいて・・・

yamabejpさんの、回答が、すぐ実行されてしまう原因だと思います。

すぐ実行されないよう対策した上で、setTimeoutを生かすなら、下記のような記述で良いと思います。
myrefreshには、引数_CF_DATAがあるので、それを渡してあげる必要があります。
(ソースから該当するデータが読み取れないので、あくまで例としてvalueFor_CF_DATAとしました)

setTimeout
(IE9以前では、動作しないようですが・・・)

setTimeout(myrefresh, 1000 * 7, valueFor_CF_DATA);

投稿2018/09/25 05:25

Meganezaru

総合スコア715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

直接の回答になるかはわかりませんが、どのタイミングで更新しているかを見てみるとよいかと思います。
(実際はページにアクセスしてから7秒経過しているが、目視確認ではページが表示されてから7秒を数えていないか)

setTimeoutの前に現在時刻を保存しておき、myrefresh()の処理終了時にも
現在時刻を取得し、setTimeout前の時刻との差分を計ってみる。
(引数にsetTimeout前の時刻を追加するなどで計ってみてください。)

また、setTimeout('myrefresh()', 1000 * 7);とありますが、setTimeout(myrefresh('xxx'), 1000 * 7);ではないでしょうか?
→ 関数を''で囲む必要はない、引数を受け取る必要がある(受け取らなくてもいいなら別ですが)

[追記]setTimeoutは関数を文字列で渡してもokのようです。(あまり推奨されませんが)
[追記2] 提示した方法が良くない手法だったので訂正します。コールバック関数にするなどの方法を取るべきですね。

投稿2018/09/25 05:05

編集2018/09/25 05:38
dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

spookybird

2018/09/25 05:09

一応、setTimeoutには実行コードを文字列で渡すという機能が存在します。 例えばtextarea等に入力してもらった関数を文字列でぶっこんで実行するなんていう使い方が可能です。 が、eval()と同じでリスクありまくりなんで推奨されない書き方ではあります。
dice142

2018/09/25 05:12

なんと!そんな機能があったんですね。知りませんでした、、、。
yambejp

2018/09/25 05:14

昔はコールバック関数を使わなかったので文字列で関数を指定することが多かったですね いまは何をするにもコールバックするのでそれはそれでプログラマのストレスになっていますが・・・
Meganezaru

2018/09/25 05:22

myrefresh('xxx')の時点で、実行されちゃう気がしますが、どうなんでしょう??
dice142

2018/09/25 05:25

> yambejp様 なるほど、昔の名残みたいな感じですか。 > Meganezaru様 どうなんでしょうとは何に対してどのような意味でしょうか?
yambejp

2018/09/25 05:27

ちなみにコールバックするならこんな感じ? setTimeout(()=>{myrefresh('xxx')}, 1000 * 7);
Meganezaru

2018/09/25 05:28

setTImeout(myrefresh('xxx'), 1000 * 7);のステップが実行されたときに、 myrefresh('xxx')が実行されて、その戻り値が引数として渡される、と思いました。 実際に実行したわけではないので、「どうなんでしょう??」と・・・^^;
Meganezaru

2018/09/25 05:30

> yamabejpさん シンプルで、よいですね!
dice142

2018/09/25 05:31

ああなるほど。yambejp様のコメントで納得しました。 たしかにコールバックにしないと即時実行になってしまいますね、、、失念、、、。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問