私はまだjQueryに慣れていないので、私のajaxサンプルを機能させる方法については、setTimeoutで停止しました。 「。」を追加する場所に分割しました。 divに毎秒。
関連するコードは2つのファイルにあります。
index.html
<html><head>
<script type='text/javascript' src='jquery.js'></script>
<script type='text/javascript' src='myCode.js'></script>
</head>
<body>
<div id='board'>Text</div>
</body>
</html>
およびmyCode.js
(function(){
$(document).ready(function() {update();});
function update() {
$("#board").append(".");
setTimeout('update()', 1000); }
})();
myCode.jsファイルは正常に機能し、「update()」は初めて実行されますが、再び実行されることはありません。
ここにはいくつかの問題があります。
まず、 匿名関数 内でコードを定義しています。この構成:
_(function() {
...
)();
_
2つのことを行います。無名関数を定義して呼び出します。これを行う範囲の理由がありますが、実際にそれが欲しいものかどうかはわかりません。
コードブロックを setTimeout()
に渡します。問題は、update()
がそのように実行されたときにスコープ内にないことです。ただし、代わりに関数ポインターを渡すと、これは機能します:
_(function() {
$(document).ready(function() {update();});
function update() {
$("#board").append(".");
setTimeout(update, 1000); }
}
)();
_
関数ポインタupdate
はそのブロックのスコープ内にあるためです。
しかし、私が言ったように、匿名関数は必要ないので、次のように書き換えることができます。
_$(document).ready(function() {update();});
function update() {
$("#board").append(".");
setTimeout(update, 1000); }
}
_
または
_$(document).ready(function() {update();});
function update() {
$("#board").append(".");
setTimeout('update()', 1000); }
}
_
これらの両方が機能します。 2番目は、コードブロック内のupdate()
がスコープ内にあるため機能します。
また、$(function() { ... }
を短縮したブロック形式を使用し、setTimeout()
内でupdate()
を呼び出すよりも、単に setInterval()
を使用できます。 =代わりに:
_$(function() {
setInterval(update, 1000);
});
function update() {
$("#board").append(".");
}
_
それがそれをクリアすることを願っています。
setInterval(function() {
$('#board').append('.');
}, 1000);
ある時点で停止したい場合は、clearIntervalを使用できます。
SetTimeoutは、指定された期間後にコードセットを実行するために使用されます。したがって、指定された時間間隔で毎回関数を呼び出すため、要件ではsetIntervalを使用することをお勧めします。
これは同じことを達成しますが、はるかに簡単です:
$(document).ready(function() {
$("#board").delay(1000).append(".");
});
ほとんどすべてのjQueryメソッドの前に遅延をチェーンできます。