Répétez l'appel jQuery ajax

Comment répéter l'appel jQuery ajax toutes les 10 Secondes?

$(document).ready(function() {
    $.ajax({    
        type: "GET",    
        url: "newstitle.php",   
        data: "user=success",    
        success: function(msg) {
            $(msg).appendTo("#edix");    
        }  
    });

J'ai essayé d'envelopper le $.ajax avec une fonction et appeler la fonction avec setInterval

$(document).ready(function() {
    function ajaxd() { 
        $.ajax({
            type: "GET",
            url: "newstitle.php",
            data: "user=success",
            success: function(msg) {
                $(msg).appendTo("#edix");
            }
        });
    }
    setInterval("ajaxd()",10000);
});

, Mais il dit "ajaxd n'est pas défini"

24
demandé sur haraman 2011-02-28 13:44:15

3 réponses

Votre méthode ne doit pas être placée à l'intérieur de la méthode ready, ou elle ne serait que disponible là-bas et non à l'extérieur.

$(document).ready(function() {
    setInterval("ajaxd()",10000);
});

function ajaxd() { 
  $.ajax({
   type: "GET",
   url: "newstitles.php",
   data: "user=success",
   success: function(msg){
     $(msg).appendTo("#edix");
   }
 });
}
45
répondu balexandre 2011-02-28 10:52:23
$(document).ready(function() {

setInterval(function() { 
  $.ajax({
   type: "GET",
   url: "newstitle.php",
   data: "user=success",
   success: function(msg){
     $(msg).appendTo("#edix");
   }
 });
}, 10000);

});
8
répondu Curt 2011-02-28 10:50:35

Une meilleure approche serait d'utiliser setTimeout, donc vous ne faites une requête que lorsque la précédente est terminée.

Comment cela devrait être fait

Imaginez que la requête pour une raison quelconque (dysfonctionnement du serveur, Erreur réseau) prend plus de temps que le temps défini. Vous aurez beaucoup de demandes simultaneus, ce qui n'est pas bon. Et si vous décidez de raccourcir la différence de temps de 10 seonds à 1 seconde dans le futur?

$(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>

Je sais, après 6 ans. Mais encore, je pensé que ça vaut pour d'autres personnes.

Pourquoi le code de L'OP n'a pas fonctionné?

Il est à noter que votre code n'a pas fonctionné principalement, car vous avez passé votre appel de fonction ajaxd() en tant que chaîne à setInterval. C'est pas une bonne pratique, en partie parce que les setInterval attendent les fonctions de définie globalement. Vous devez utiliser une référence à une fonction, comme dans mon exemple. De cette façon, peu importe où votre fonction est définie et si elle est anonyme ou non.

6
répondu Wiktor Bednarz 2017-04-11 06:49:25