2

わかりました、これは奇妙です。PLUploadを使用していて、 。onCompleteという変数を返す関数がありますinfo。ChromeDevConsoleで返されるものは次のとおりです。

Object {response: "[{"id":"65","series":"","part":"","title":"","subt…,"file":"","product":"","type":"1","status":"2"}]", status: 200}
var response = $.parseJSON(info['response']);

$.each(response, function(key, value) {
    console.log(value);
   $.each(value, function(k, v) { 
       console.log(v);
    });
});

console.log(value)Chrome DevConsoleでこれを教えてくれます:

Object {id: "69", title: "", ogv: "", webm: "", length: "0:12"…}

矢印を下に向けると、すべての要素が表示されます。だから私は、$.eachonを実行すると、エコーvalue以外は何も生成されないと思いました。console.log(v)

しかし、私がそうするならば、私はconsole.log(value['id'])65を得ます。それで、それはうまくいきます。

$.each関数を使用してこのオブジェクトを反復処理できないのはなぜですか?

4

3 に答える 3

1

これはjQueryのバグと見なされる可能性がありますが、繰り返し処理するオブジェクトにはlengthプロパティがあります。明らかに、反復の目的で$.each使用します。lengthを使用したほうがよいでしょうfor..in

于 2013-01-07T05:40:32.137 に答える
0

$.eachコレクション(配列)を反復処理するために使用されます。オブジェクトのプロパティを反復処理しようとしています。これはfor..inループで行われます。

var response = $.parseJSON(info["response"]);

$.each(response, function(key, value) {
    for (property in value) {
        if (value.hasOwnProperty(property))
            console.log(property + " -> " + value[property]);
    }
});

編集:

また、サーバーは1つのオブジェクトを含む配列を返しています。毎回1つのオブジェクトしか受け取らないことがわかっている場合、これは次のように簡略化できます。

var value = $.parseJSON(info["response"])[0];

for (property in value) {
    if (value.hasOwnProperty(property))
        console.log(property + " -> " + value[property]);
}
于 2013-01-07T05:52:52.060 に答える
0

$ .eachは、長さをキーとして使用しており、これもjavascriptメソッドであり、これは$.eachがhasOwnPropertyメソッドを使用しないjQueryバグであるため、指定されたオブジェクトを反復処理できません。

jQuery.eachバグも言及されていますhere

したがって、 hasOwnPropertyチェックでコアjavascript for..inメソッドを使用する方がよい

var op = { "id":"69", "title":"", "ogv":"", "webm":"", "length":"012" };
for(var i in op) { 
    if(op.hasOwnProperty(i)) {
         console.log(i + ':' + op[i] + '\n');
   }
}
于 2013-01-07T05:58:24.867 に答える