2010-02-23 119 views
2

我想通过AJAX过滤JSON数组,并不知道如何做到这一点。“过滤器”JSON通过Ajax(jQuery)

{ posts: [{"image":"images/bbtv.jpg", "group":"a"}, {"image":"images/grow.jpg", "group":"b"}, {"image":"images/tabs.jpg", "group":"a"}, {"image":"images/bia.jpg", "group":"b"}]} 

我想它,这样我可以只显示在A组或项目组B.

如何将我不得不改变我的AJAX通过内容过滤?

$.ajax({ 
type: "GET", 
url: "category/all.js", 
dataType: "json", 
cache: false, 
contentType: "application/json", 
success: function(data) { 
$('#folio').html("<ul/>"); 
$.each(data.posts, function(i,post){ 
    $('#folio ul').append('<li><div class="boxgrid captionfull"><img src="' + post.image + '" /></div></li>'); 
}); 

initBinding(); 
}, 
error: function(xhr, status, error) { 
    alert(xhr.status); 
} 

});

此外,我怎样才能使每个链接过程的过滤器?

<a href="category/all.js">Group A</a> <a href="category/all.js">Group B</a> 

对不起,所有这些问题,似乎无法找到解决办法.. 在正确的方向任何帮助,将不胜感激。

谢谢!

回答

0

你需要写一个过滤功能,更可能:

function filterGroup(obj, filteredGroup) { 
    var resultObj = $.extend({},obj); 

    for (var i in obj) { 
    if (obj.hasOwnProperty(i)) { 
     if (obj[i].group && obj[i].group !== filteredGroup) { 
     delete resultObj[i]; 
     } 
    } 
    } 
    return resultObj; 
} 

然后你只是通过过滤器运行数据。你也可能想用这样的一堆JSON切换到POST。

$.ajax({ 
    type: "POST", 
    url: "category/all.js", 
    dataType: "json", 
    cache: false, 
    data: {"posts": filterGroup(posts, 'a')}, 
    contentType: "application/json", 
    success: function(data) { 
    $('#folio').html("<ul/>"); 
    $.each(data.posts, function(i,post){ 
     $('#folio ul').append('<li><div class="boxgrid captionfull"><img src="' + 
          post.image + '" /></div></li>'); 
    }); 
    } 
}); 

这段代码大部分是假设的,因为我不知道你在做什么,但它应该让你接近。只是不要指望能够复制/粘贴它。这假设你实际上将你的数据变量命名为posts

要创建链接运行代码,您需要附加点击处理程序并确定每个链接。我假设你添加一个类名到每个(filterA和filterB):

$('.filterA').click(function(){ 
    filterGroup(someDataObject, 'a'); 
    return false; 
}); 
$('.filterB').click(function(){ 
    filterGroup(someDataObject, 'b'); 
    return false; 
}); 
+0

您的代码从原来的对象删除的财产,我想你想使用'resultObj'即删除循环内,滤波''a''到''b''和后面会导致一个空的'someDataObject'与当前代码。 – 2010-05-09 23:52:43

+0

感谢尼克,修好了。 Twas只是一个疏忽。 – 2010-05-10 00:27:17