2011-12-02 51 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