Console.jsを使用しデバックした結果、ループになるケースついてです。
例】ユーザがサーバに対して、登録メールアドレスに変更をかける
(ブラウザ:Chrome11, iPhone4-Safari)
<html>
<head>
<script type="text/javascript" src="Console.js"></script>
<script type="text/javascript" src="inc.js"></script><!-- goAction()を定義 -->
<script type="text/javascript">
<!--
function wait() {
Console.print("Hello !");
if ( goAction ) {
Console.print("Hello ! goAction ");
if(document.FRM1) {
Console.print("Hello ! FRM1");
return
}
}
setTimeout("wait()", 200);
}
wait();
-->
</script>
</head>
<body>
<?php
if ($_POST['update'] != 'true') {
?>
<form name="FRM1">
<input type="hidden" name="update" value="true">
<INPUT type="button" onclick="goAction()" value="送信"><!-- 自ファイルへsubmitさせる -->
</form>
<?php
}
else
{
/* 省略:POSTデータでDBに更新をかけ、成功したら
更新結果をhtml表示する
*/
}
?>
DBのデータ更新が成功し、再び自ファイルがhtml表示された後、
Console.print()の表示結果が、
Hello !
Hello ! goAction
...
のループ状態になってしまいます。
( 500文字制限のため.皆様の返信にコメントで追記するつもりです.)
(何度も更新してすいません)
(window.onloadでgoActionすればwait関数がいらない?)
ソースコードの貼り付けなら https://gist.github.com/ などにどうぞ。
はここで実行されちゃうものだと勘違いしていました。失礼。
postされた場合はdocument.FRM1が見つからないので、waitのループになりますよね。
ページ読み込み後にdocument.FRM1があるか確認するだけなら、
window.onload = function() {
if(document.FRM1) {
Console.print("Hello ! FRM1");
}
}
> /* 省略:POSTデータでDBに更新をかけ、成功したら更新結果をhtml表示する*/
の「html表示する」をちゃんと書いていなくて、元のページがそのまま表示されてループが起きていたとか。
まだなにかお困りでしょうか?
納得できました。