Повторить вызов jQuery ajax
Как повторить jQuery ajax-вызов каждые 10 секунд?
$(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 не определен"
Ответы
Ответ 1
Ваш метод не следует размещать внутри метода готов, иначе он будет доступен только, а не снаружи.
$(document).ready(function() {
setInterval("ajaxd()",10000);
});
function ajaxd() {
$.ajax({
type: "GET",
url: "newstitles.php",
data: "user=success",
success: function(msg){
$(msg).appendTo("#edix");
}
});
}
Ответ 2
$(document).ready(function() {
setInterval(function() {
$.ajax({
type: "GET",
url: "newstitle.php",
data: "user=success",
success: function(msg){
$(msg).appendTo("#edix");
}
});
}, 10000);
});
Ответ 3
Лучшим подходом было бы использовать 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>