只能使用匹配键获取json对象

问题描述:

所以我想要做的事情很简单。我有一个网站显示评论,我有一个管理页面,允许管理员删除评论。不过,我需要在评论之前将其隐藏。只能使用匹配键获取json对象

这个脚本抓住每一个对象在我的JSON文件,并将其显示:

$.getJSON("data/comments.json", function(data) { 
    var number = []; 
    $.each(data, function(index, d) { 
     number.push("<div class='comment' id='" + index + "'>" + "<div class='comment-text'>" + d.comment + "</div>" + "<img class='comment-image' src='data/upload/" + d.img + "'>" + "<div class='comment-identifier'><span class='comment-name'>" + "– " + d.name + "</span>" + "<span class='comment-department'>" + ", " + d.department + "</span></div>" + "</div>"); 
    }); 
    $("<div/>", { 
     "id": "comment-container", 
     html: number.join("") 
    }).appendTo("#comment-layout"); 
}); 

每个JSON对象都会有一个关键的“批准:假”在创建适用于它。我怎样才能让上面的脚本只拉对象的“approved:true”对象呢?

您可以在$.each函数中检查批注是否被批准。

$.each(data, function(index, d) { 
    if(d.approved){ 
     number.push("<div class='comment' id='" + index + "'>" + "<div class='comment-text'>" + d.comment + "</div>" + "<img class='comment-image' src='data/upload/" + d.img + "'>" + "<div class='comment-identifier'><span class='comment-name'>" + "– " + d.name + "</span>" + "<span class='comment-department'>" + ", " + d.department + "</span></div>" + "</div>"); 
    } 
}); 
+0

啊,本来看似简单,不知道我是否需要$ .grep或什么。我会试试这个。谢谢。 – Aeromax

+1

确保'd.approved'存储为布尔值而不是字符串(在这种情况下使用'd.approved ==“true”')。同样如@EoiFirst所说,数据仍然可以在客户端使用,并且可以使用开发者工具(或类似的工具)进行检查 –

+0

是的,我并不担心有人在旁边看到它,这是一个内部项目,大多数人不会我不知道如何或照顾这么做。如果评论被拒登,无论如何它都会从服务器端数据文件中删除。 – Aeromax

您可以在将它推送到阵列之前检查它是否被批准。尽管如此,它并不妨碍数据被客户端接收。

$.getJSON("data/comments.json", function(data) { 
    var number = []; 
    $.each(data, function(index, d) { 

     if (d.approved == false) 
      continue; 

     number.push("<div class='comment' id='" + index + "'>" + "<div class='comment-text'>" + d.comment + "</div>" + "<img class='comment-image' src='data/upload/" + d.img + "'>" + "<div class='comment-identifier'><span class='comment-name'>" + "– " + d.name + "</span>" + "<span class='comment-department'>" + ", " + d.department + "</span></div>" + "</div>"); 
    }); 
    $("<div/>", { 
     "id": "comment-container", 
     html: number.join("") 
    }).appendTo("#comment-layout"); 
}); 

如果你不希望数据在客户端到达,你应该过滤你的数据服务器端,并使用$阿贾克斯,而不是$ .getJSON:

$.ajax({ 
    url: 'routeToYourFilterFunction', 
    success: function(data){ 
     number.push(); 
    } 
});