一尘不染

通过Javascript解析JSON对象(对象列表)并在其中循环?

jsp

好的,我知道有什么问题,但是我不明白是什么。

我从编写的Web服务中读取了服务的ArrayList(以JSON媒体类型)。转到该地址将返回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>

它得到了更新和全部信息(很好!),但是我有一个问题: 它一直 在较大的文件集(空divs)内 创建新的divs 。如何避免这种情况?

编辑2:

没关系,我做完了!只需在appendChild之前添加以下行:

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

奇迹般有效。谢谢!


阅读 235

收藏
2020-06-10

共1个答案

一尘不染

使用JQuery时,您无需解析,data因为在设置时已将其解析为JSON dataType: "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页面,而只是返回您在#servicediv中想要的内容。让我们调用该页面doit.jsp。现在我们可以使用ajax将它放在#servicediv中。

$.ajax({
    url: "doit.jsp",
    success: function(data) { $("#service").html(data); });
2020-06-10