2013-07-21 44 views
2

我試圖穿過它的內容通過AJAX,環端來一JSON對象進行迭代,並與延遲顯示在DIV結果3s迭代通過JSON對象並顯示結果在定期

var resultHtml = ""; 
$test = $.parseJSON('{"zone_1":"ZONE 1 NORMAL","zone_2":"ZONE 2 NORMAL","zone_3":"ZONE 3 NORMAL","zone_4":"ZONE 4 NORMAL","zone_5":"ZONE 5 NORMAL","zone_6":"ZONE 6 NORMAL","zone_7":"ZONE 7 NORMAL","zone_8":"ZONE 8 NORMAL"}'); 
$.each($test, function(key,value){ 
    console.log("start :"+value); 
     $('#results').delay(5000).html(value); 
    console.log("end :"+value); 
    }) 

我想這http://jsfiddle.net/XsMK2/71/

但不知何故,我似乎並沒有能夠顯示所有內容。只顯示最後一個元素。

回答

2

使用.append()而不是.html().html()替換div(innerHTML)內的整個html代碼,而.append()僅添加到結尾。 working jsFiddle

每次迭代都會覆蓋前一次,直到只剩下最後一次。

編輯:

按照添加的信息檢查new jsFiddle。然而 我追加的所有項目設置thier display:none,然後在使用setInterval我切換可見一個,

+0

我不需要顯示所有的結果一起.. 。一次只能顯示一行,而不是全部在這個問題中值得一提的是 – Enihr

+0

mm。一秒 –

+0

「每次迭代都會覆蓋前一次,直到只留下最後一次。」 是的,當然。我明白了。但是,延遲至少應該以5秒爲間隔覆蓋內容。不是嗎?我嘗試使用setInterval但沒有任何運氣。 – Enihr

1

我會建議使用超時,和遞增時間:

var resultHtml = ""; 
$test = $.parseJSON('{"zone_1":"ZONE 1 NORMAL","zone_2":"ZONE 2 NORMAL","zone_3":"ZONE 3 NORMAL","zone_4":"ZONE 4 NORMAL","zone_5":"ZONE 5 NORMAL","zone_6":"ZONE 6 NORMAL","zone_7":"ZONE 7 NORMAL","zone_8":"ZONE 8 NORMAL"}'); 
var i = 0; 
$.each($test, function(key,value){ 
    console.log("start :"+value); 
    setTimeout(function() { 
     $('#results').html(value); 
    }, 250 * i); 
    i ++; 
    console.log("end :"+value); 
}) 

小提琴: http://jsfiddle.net/GFSdY/

這裏發生了什麼?

我將var i定義爲我們找到的所有索引的計數器。 each循環立即執行,所有(key, vlue)對。在每次迭代中,我們通過增加1

第一超時立即(0 * 250)執行計數器,後250毫秒(1 * 250),等第二...

+0

解決了這個問題。謝謝。但是,你能解釋一下在setInterval中增加時間部分嗎? – Enihr