2013-04-17 334 views
0

我正在嘗試做一個動態列表視圖,每5秒更新一次。它在加載時首次加載完美,但是我的setinterval運行不正常。它每5秒鐘一次,但它不更新我的菜單,即使已作出更改?每5秒刷新一次jquery JSON

這是我走到這一步:

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

的$ .mobile.loading( '秀'); 5秒後開始,但不會到達$ .mobile.loading('hide');

任何幫助表示讚賞,並在此先感謝:-)

+1

您應該認真思考重構您的代碼 –

+0

您是否收到任何Consol錯誤?在'show'遍歷每一行後,你是否嘗試過console.log(「test」),看看哪一個(如果有的話)搞亂了? – ntgCleaner

+1

您正在重複相同的代碼塊兩次。把它放到一個函數中,並從你需要的地方調用那個函數。少維護這種方式,代碼少得多。 –

回答

2

var user_id與超時功能處於不同的範圍。將超時放在文檔就緒區塊內,解決問題。另外,考慮重構代碼以避免重複並提高可維護性。例如:

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

哦,是的......這是做的工作。不知道你對重構有何看法?你能解釋一下嗎? – Mansa

+0

通過重構,我們的意思基本上就是我所做的:消除所有重複並將其濃縮爲更易維護的塊。 –

1

我認爲在setInterval的匿名函數你的user_id變量可能不可見。