10秒ごとにjQuery ajax呼び出しを繰り返す方法は?
$(document).ready(function() {
$.ajax({
type: "GET",
url: "newstitle.php",
data: "user=success",
success: function(msg) {
$(msg).appendTo("#edix");
}
});
$ .ajaxを関数でラップし、setIntervalで関数を呼び出そうとしました
$(document).ready(function() {
function ajaxd() {
$.ajax({
type: "GET",
url: "newstitle.php",
data: "user=success",
success: function(msg) {
$(msg).appendTo("#edix");
}
});
}
setInterval("ajaxd()",10000);
});
しかし、それは「ajaxdが定義されていない」と言っています
メソッドをreadyメソッドの内部に配置しないでください。そうしないと、外部ではなくonly be =で使用できます。
$(document).ready(function() {
setInterval(ajaxd, 10000);
});
function ajaxd() {
$.ajax({
type: "GET",
url: "newstitles.php",
data: "user=success",
success: function(msg){
$(msg).appendTo("#edix");
}
});
}
より良いアプローチはsetTimeout
を使用することです。そのため、前のリクエストが完了したときにのみリクエストを行います。
なんらかの理由(サーバーの誤動作、ネットワークエラーなど)で要求が定義された時間より長くかかると想像してください。多くの同時リクエストが発生しますが、これは良いことではありません。また、時差を10秒から1秒に短縮するとしたらどうでしょうか。
_$(function() {
var storiesInterval = 10 * 1000;
var fetchNews = function() {
console.log('Sending AJAX request...');
$.ajax({
type: "GET",
url: "newstitles.php",
data: {
user: 'success',
some: ['other', 'data']
}
}).done(function(msg) {
$(msg).appendTo("#edix");
console.log('success');
}).fail(function() {
console.log('error');
}).always(function() {
// Schedule the next request after this one completes,
// even after error
console.log('Waiting ' + (storiesInterval / 1000) + ' seconds');
setTimeout(fetchNews, storiesInterval);
});
}
// Fetch news immediately, then every 10 seconds AFTER previous request finishes
fetchNews();
});
_
_<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
_
6年後のことです。しかし、それでも他の人にとっては価値があると思いました。
ajaxd()
関数呼び出しを文字列としてsetInterval
に渡したため、コードが主に機能しなかったことは注目に値します。 setInterval
は関数がグローバルに定義されているであると想定しているため、これは非推奨です。私の例のように、関数への参照を使用する必要があります。そうすれば、関数がどこで定義されているか、それが匿名であるかどうかは関係ありません。
$(document).ready(function() {
setInterval(function() {
$.ajax({
type: "GET",
url: "newstitle.php",
data: "user=success",
success: function(msg){
$(msg).appendTo("#edix");
}
});
}, 10000);
});