我有一个关于jQuery的$.each
方法的查询。下面是我的ajax工作得很好:
$.ajax({
url:'js/people-json.js',
type:'post',
dataType:'json',
success:function(data){
$.each(data.names, function(i, data) {
console.log(data);
});
},
error:function(err){
console.log(err);
}
});
这个脚本工作正常,给了我想要获得的JSON结果。然而,这给了我结果,但这是我存储在外部JS文件中的一长串信息,其中JSON格式如下所示:
{
"people": [
{
"name": "aaa",
"age": 32,
"email": "aaa@abc.xyz"
},
{
"name": "bbb",
"age": 21,
"email": "bbb@abc.xyz"
},
{
"name": "ccc",
"age": 45,
"email": "ccc@abc.xyz"
},
..............lot of more here around 8000
]
}
有没有办法以这种方式循环jQuery:
$.each(data.names<=200, function(i, data) {
console.log(data);
});
或者这样:
$.each(data.names, function(i<=200, data) {
console.log(data);
});
或者这个:
$.each(data.names, function(i, data<=200) {
console.log(data);
});
我们可以在第一次加载时循环使用200个结果然后 点击一个按钮循环与另一个200等等。
注意:我更喜欢jQuery解决方案。
答案 0 :(得分:5)
直接回答你的问题,不是。
.each()
迭代集合中的所有项目。它不提供过滤选项。您将像这样过滤自己并更改每次单击的if语句中的值:
$.each(data, function(i, data) {
if (i <= 200) {
console.log(data);
}
});
或者,如果data
是一个数组,你可以提取前200个并迭代它们:
$.each(data.slice(0, 200), function(i, data) {
console.log(data);
});
或者,如果data
是一个数组,for
循环将为您提供更大的灵活性:
for (var i = 0; i < 200; i++) {
console.log(data[i]);
}
如果您每次点击都要尝试200个项目,那么您需要更多地了解您正在做的事情。你从ajax电话获得所有结果吗?如果是这样,他们你不想每次都要反映它们。只需存储所有结果,然后每次处理下200个结果。保留一个计数器变量,指示到目前为止已经处理了多少。
var data = [...];
var dataIterationCnt = 0;
function getNextChunk(n) {
var end = Math.min(dataIterationCnt + n, data.length)
for (var i = dataIterationCnt; i < end; i++) {
console.log(data[i]);
}
dataIterationCnt = i;
return(dataIterationCnt < data.length);
}
// then in your code, you just call getNextChunk(200)
// until it returns null which means it has no more to iterate
var more = getNextChunk(200);
答案 1 :(得分:1)
坚持使用jQuery,最简单的方法是遍历data.names
中的所有项目,直到批处理中的最后一项,在批处理开始之前拒绝这些项目。
var nameObj = {
index: 0,
batchSize: 200
};
function nextNamesBatch() {
$.each(data.names, function(i, data) {
if(i < nameObj.index) return true;//==continue
if(i >= nameObj.index + nameObj.batchSize) return false;//==break
console.log(data);
});
nameObj.index += nameObj.batchSize;
}
是的,随着批次的进展,效率问题日益严重,但我相信,对于中等规模的数组,开销将小于替代jQuery方法的开销,即限制data.names
(或者克隆它在$.each(...)
之前。
答案 2 :(得分:-2)
它可以是基于标签..或数据列表,你可以试着告诉它是否有用..
$('li').each(function(index) {
alert(index + ': ' + $(this).text());
});
请申请这样的逻辑并测试..