-2

$.eachjQueryのメソッドについて質問があります。以下は、非常にうまく機能している私の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 の結果が得られます。ただし、これにより結果が得られますが、これは、次のような JSON 形式の外部 JS ファイルに保存した情報の長いリストです。

{
"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ソリューションをお勧めします。

4

3 に答える 3

5

あなたの質問への直接的な答えとして、No.

.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]);
}

1 回のクリックで 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);
于 2012-12-21T05:57:51.917 に答える
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(...).

于 2012-12-21T06:33:15.213 に答える
-2

タグに基づいてこのようにすることができます..またはデータのリスト..参考になるかどうか試してみてください..

$('li').each(function(index) {
    alert(index + ': ' + $(this).text());
});

このようなロジックを適用してテストしてください..

于 2012-12-21T06:10:58.200 に答える