我有一个ajax函数,它调用servlet来获取各种web服务的产品列表,产品数量最多可达100,000。我需要在html表中显示这个列表。
我正在尝试为用户提供一个界面来根据几个条件过滤此列表。目前我使用一个简单的jQuery插件来实现这一点,但我发现它占用了内存和时间。 我使用的Javascript基本上使用正则表达式来搜索和过滤符合过滤条件的行。
我在想一个替代解决方案,其中我过滤了我的servlet返回的JSON数组并将html表绑定到它。有没有办法实现这一点,如果有,那么它是否比正则表达式方法更有效。
答案 0 :(得分:1)
编辑:由于您没有数据库,因此您可以做的最好的事情是在JSON数据集上运行正则表达式并添加与表匹配的结果。您需要将JSON数据集保存在变量中,以防它们更改搜索。 (我现在假设您正在将所有内容添加到表中,然后使用jquery表插件对其进行过滤)
答案 1 :(得分:1)
查看最多100,000件商品并检查他们是否符合您的标准需要一段时间,特别是如果标准可能很复杂(必须是带有2或3个卧室的CONDO,而不是邮政编码12345和FIREPLACE但不是JACUZZI)
也许您的servlet可以缓存100,000个项目的数据,而它可以根据用户浏览器发布的条件进行过滤。例如,它可以返回“从100,000中选择的12,456项1-50”并让用户页面前进到下一个50左右,甚至可以选择要返回的项目数(25,50,全部)。
如果他们在缩小数字之前选择“全部”,那么中途观察的用户将期待它需要一段时间才能加载。
换句话说,甚至不要尝试管理浏览器中的100,000个项目,让服务器执行此操作。
答案 2 :(得分:0)
我假设通过过滤你的意思是只显示数据的子集;而不是排序。
当您将数据填充到表中时,为要过滤的行中的所有内容添加类到每一行。 e.g:
<tr class="filter1 filter2 filter3">....
<tr class="filter1 filter3">....
<tr class="filter2">....
<tr class="filter3">....
然后,当您想要应用过滤器时,您可以执行以下操作:
$('TR:not(.filter1)').hide();
答案 3 :(得分:0)
我同意Berry的看法,浏览器中的100000行有点紧张,但是如果有任何接近处理这种程度的东西那么它就是jOrder。 http://github.com/danstocker/jorder
根据您的JSON创建一个jOrder表,并添加最必要的索引。我的意思是你必须不惜一切代价过滤那些。
E.g。你有一个带有人名的“姓名”字段。
var table = jOrder(json)
.index('name', ['Name'], { sorted: true, ordered: true });
然后,例如,这就是您选择Name字段以“John”开头的记录:
var filtered = table.where([{ Name: 'John' }], { mode: jOrder.startof, renumber: true });
稍后,如果您需要在表格中进行分页,只需向表格构建器提供filtered.slice(...)
。
答案 4 :(得分:-1)
如果你要回来xml,你可以使用jQuery选择
$('.class', context)
其中context是您的xml响应。
从这个选择中,您可以将xml写入页面并使用CSS来设置样式。这是我至少开始的地方。我在我的一个应用程序中做了类似的事情,但我的数据集较小。
答案 5 :(得分:-1)
我不知道“绑定”是什么意思?您可以解析JSON,然后使用for
循环(或$ .each())填充以太直接HTML或使用网格插件的插入/添加