2011-12-02 50 views
3

好吧,我知道有什麼問題,但我不明白是什麼。通過Javascript解析JSON對象(對象列表)並在其中循環?

我從我寫的Web服務中讀取服務ArrayList(JSON mediatype)。 去那個地址返回我的JSON字符串。

現在我正在嘗試製作一個網頁,用於顯示值並每隔3秒查看一次頁面請求發生的更改。

我該如何解析或使用它?閱讀大量的多,我仍然開始..

[是無法將此對象傳遞給JSP和解析,循環的一切與JSTL?這將是真棒]

這裏的js代碼:

<script type="text/javascript"> 
setInterval(function(){ 
    $.ajax({ url: "/MyApp/rest/display", success: function(data){ 
     var objs = $.parseJSON(data); 
     $.each(objs, function(i,service) { 
      $("#service").append('<p>'+service+'</p>'); 
     }); 
    }, dataType: "json"}); 
}, 3000); 
</script> 

我有一個<div id="service">

編輯: 快到了!

現在我已經這樣:

<script type="text/javascript"> 
setInterval(function(){ 
    $.ajax({ url: "/myApp/rest/display", success: function(data){ 
     $.each(data, function(i,service) { 
      var cont = 1; 
      var newdiv = document.createElement('div'); 
      newdiv.setAttribute('id', "service"+i); 
      $("#service"+i).html('<p>'+service.serviceId+" "+service.queue.lastNumber+'</p>'); 
      document.getElementById("services").appendChild(newdiv); 
      cont++; 
     }); 
    }, dataType: "json"}); 
}, 5000); 
</script> 

它得到了更新和所有(太好了!),但我有一個問題:它不斷創造新的div更大的一個(空的div)內。我怎樣才能避免這種情況?

EDIT2:

沒關係,我已經做了! 的使用appendChild前剛剛加入這一行:

if(!$("#service"+i).length) 

就像一個魅力。謝謝!

回答

1

使用JQuery,您無需解析data,因爲當您設置dataType: "json"時,它已被解析爲JSON。

$.ajax({ 
    url: "/MyApp/rest/display", 
    success: function(data) { 
     $.each(data, function(i,service) { 
      $("#service").append('<p>'+service+'</p>'); 
     });}, 
    dataType: "json" }); 

PS。如果這不起作用,請發佈AJAX調用返回的JSON。

編輯:這是JSTL的做事方式: 創建一個JSF或JSP,它不會返回完整的HTML頁面,而只是你想要的內部#service股利。讓我們打電話給頁面doit.jsp。現在我們可以使用ajax將它放在#service div中。

$.ajax({ 
    url: "doit.jsp", 
    success: function(data) { $("#service").html(data); }); 
+0

OMG!有效!但是我遇到了一個問題,每3秒腳本就爲我添加了新的div。我怎樣才能更新那些? **編輯:**以後我會嘗試jsp代碼!謝謝! ;) – Enrichman

+0

@Enrichman:沒問題。如果你想''(「#service」)。append('

'+ service +'

');'只需替換而不是追加你應該使用html方法'$(「#service」)。html('

'+ service +'

');' –

+0

我遇到了問題。最後的服務覆蓋所有的服務。 – Enrichman