2011-11-12 30 views
3

我有一個JavaScript函數,我試圖添加到我的文檔中,使其具有實時更新的感覺。這是對我的MVC控制器的AJAX調用,它返回一個JSON結果並將它添加到頂部的列表中,然後隱藏最後一個li,然後刪除最後一個li。Javascript功能正常工作8次,然後每隔一段時間

問題是,該功能完美地工作8次,然後變得棘手。在前8次之後,該功能只隱藏列表中的最後一項,每隔一次將其添加到頂部。因此,第一個8次運行後,我的名單不斷增加1裏的腳本每隔運行:

這裏是我的功能:

<script type="text/javascript"> 
    $(document).ready(function() { 
     function latestBranch() { 
      $.getJSON("Home/LatestWristband", null, function (html) { 
       var showHideSpeed = 200; 
       var firstLI = $("#recentBranches ul li").first(); 
       if (firstLI.text() !== html) { 
        firstLI.before('<li>' + html + '<\li>'); 
        $("#recentBranches ul li").first().hide().show(showHideSpeed); 
        $("#recentBranches ul li").last().hide(showHideSpeed/4, 
         function() { 
          $("#recentBranches ul li").last().remove(); 
         }); 
       } 
      }); 
     }; 
     setInterval(latestBranch, 500); 
    }); 
</script> 

我已經試過幾件事情要得到這個工作。我的第一個想法是,間隔比腳本擺脫最後一個列表項目更快,但我已經測試了這個間隔爲5000的get,並且1000爲隱藏/顯示元素,這應該提供一個至少在下一次通話之前超過3000ms。我也試圖改變這一點:

$("#recentBranches ul li").last().hide(showHideSpeed/4, 
         function() { 
          $("#recentBranches ul li").last().remove(); 
         }); 

到:

$("#recentBranches ul li").last().remove(); 

但是我8次後得到了同樣的問題。看起來,雖然它進入了這種節奏,每隔一段時間只能工作一次,但它保持不變。我曾試圖尋找aroudn,但我似乎無法找到任何可以解釋這些症狀......

+0

有人曾建議我用的setTimeout與替代函數的遞歸選項完成後,自稱,推遲了。我確實嘗試過,但也遇到同樣的問題。我已清除瀏覽器緩存,並驗證瀏覽器中的腳本是我剛剛更改的腳本。 – tostringtheory

回答

3

您使用了錯誤的斜線關閉<li>,這意味着你實際上每增加2個<li>小號請求。 (第二個是空白)

改變這一行:

firstLI.before('<li>' + html + '<\li>'); 

這樣:

firstLI.before('<li>' + html + '</li>'); 
+1

優秀!愚蠢的錯誤,應該抓住它。我想我之所以沒有這樣做,是因爲它只在對方之前工作過8次。我可以理解8次是正確的,因爲列表中最初有7個項目,所以當它刪除第7個時,它就是不正確的li。但是,你能解釋爲什麼它每隔一段時間都有效嗎?如果它只刪除了7個,然後繼續添加,但從未刪除,我可能已經抓住了這一點。我覺得這真的很奇怪有趣! – tostringtheory

+1

啊,對不起,我沒有看到2 li的每個請求!我已經標記了你的答案,但是它已經升級了!非常感謝。 – tostringtheory

相關問題