2013-04-17 4 views
0

J'essaye de faire un listview dynamique qui est en train de recharger pour les changements toutes les 5 secondes. Il charge parfaitement la première fois en charge mais mon setinterval ne fonctionne pas correctement. Il va de toutes les 5 secondes, mais il ne met pas à jour mon menu, même si des modifications ont été apportées?Recharger jquery JSON toutes les 5 secondes

Voici ce que je suis arrivé à ce jour:

$(document).on('pageshow', function(){ 
    var userid=1; 
    $.mobile.loading('show'); 
    $.getJSON("http://mypage.com/playermenu.php?callback=?&userid="+userid,   
     function(data){ 
      var content = [] 
      $.each(data , function(i,val){ 

       content.push(val.list); 

      }); 

      $("#games").html(content.join("")); 
      $('#games').listview('refresh'); 

      $.mobile.loading('hide'); 

     }); 
}); 

setInterval(function(){ 
    $.mobile.loading('show'); 
    $.getJSON("http://mypage.com/playermenu.php?callback=?&userid="+userid,   
     function(data){ 
      var content = [] 
      $.each(data , function(i,val){ 

       content.push(val.list); 

      }); 

      $("#games").html(content.join("")); 
      $('#games').listview('refresh'); 

      $.mobile.loading('hide'); 

     }); 
}, 5000); 

Le .mobile.loading de $ ('show'); commence après 5 secondes mais n'atteint pas $ .mobile.loading ('hide');

Toute aide est appréciée et merci à l'avance :-)

+1

Vous devriez envisager sérieusement de refactoriser votre code –

+0

Avez-vous des erreurs Consol? Avez-vous essayé console.log ("test") après votre "show" en passant par chaque ligne pour voir lequel (si un) est en train de gâcher? – ntgCleaner

+1

Vous répétez deux fois le même bloc de code. Mettez-le dans une fonction et appelez cette fonction à partir d'autant d'endroits que nécessaire. Moins à maintenir de cette façon, et beaucoup moins de code. –

Répondre

2

var user_id est dans une portée différente de celle de la fonction de temporisation. Mettez le délai d'attente à l'intérieur du bloc de document prêt et le problème résolu. En outre, pensez à refactoriser votre code pour éviter autant de répétitions et améliorer la maintenabilité. Par exemple:

$(document).on('pageshow', function() { 
    var userid = 1, 
     url = 'http://mypage.com/playermenu.php?callback=?&userid=' + userid, 
     callback = function (data) { 
      var content = []; 
      $.each(data, function (i, val) { 
       content.push(val.list); 
      }); 
      $('#games').html(content.join('')).listview('refresh'); 
      $.mobile.loading('hide'); 
     }, 
     fetchData = function() { 
      $.mobile.loading('show'); 
      $.getJSON(url, callback); 
     }; 
    fetchData(); 
    setInterval(fetchData, 5000); 
}); 
+0

Oh oui ... ça a fait l'affaire. Vous ne savez pas ce que vous pensez du refactoring? Pouvez-vous s'il vous plaît expliquer. – Mansa

+0

En refactoring, nous entendons essentiellement ce que j'ai fait: éliminer toute la répétition et la condenser en morceaux plus maintenables. –

1

Je pense que votre variable user_id pourrait ne pas être visible dans la fonction anonyme setInterval.

Questions connexes