Подтвердить что ты не робот

Повторить вызов 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 не определен"

4b9b3361

Ответ 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>