さて、これを例にとってみましょう:
$(document).ready(function(){
(function iterate(i) {
if (!!i) {
console.log('iteration #', i--);
setTimeout(function next(){
iterate(i);
}, 1000);
}
})(10);
});
http://jsfiddle.net/userdude/6C8yp/
コンソールを見ると、i
がに等しくなるまで0
、またはi
与えられなくなるまでカウントダウンすることがわかります(これがコンソールの!!
目的です)。ここで行っているのは毎秒ループですが、最後のループが終了した後でのみです。ループに餌をやっています。
あなたがここに持っているものを見て、私は代わりにこれをするかもしれません:
$(document).ready(function($){
var $shoutbox = $("#shoutdiv"),
timer;
(function update(){
var opts = {
url: 'shoutbox.php',
action: 'update',
complete: wait
};
$.ajax(opts);
function wait(res, status, req){
if (status == 200) {
$shoutbox
.append(res)
.scrollTop($shoutbox[0].scrollHeight);
timer = setTimeout(update, 6000);
}
}
})();
});
http://jsfiddle.net/userdude/whsPn/
http://jsfiddle.net/userdude/whsPn/1/
さて、上記の内容は、ほとんどの場合、質問にあるコードをエミュレートする必要があります。あなたは私がcomplete: wait
そこにその部分を持っていることに気付くでしょう、そしてそれsetTimeout()
はそのコールバックにあります。そして..status
返されるのが200
(成功)の場合にのみ呼び出されます。
complete: wait
ここで、に目を向けてsuccess: wait
、status == 200
ifステートメントを完全に削除することができます。もちろん、更新を再度実行したいが、何か別のことをしたい場合は、これがチャンスです。
また、リンクされたフィドルには、ダミーコードが含まれていることに注意してください。したがって、フィドルにあるものをコピー/ページングするだけではいけません。そうしないと、エラーが発生してまったく実行されなくなります。
編集:おっと、。でエラーが見つかりましたurl =
。修理済み。