2

好吧,这很奇怪。我正在使用 PLUpload,它有一个onComplete函数可以返回一个名为info. 这是它在 Chrome 开发控制台中返回的内容。

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 开发控制台中给了我这个:

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

我可以调低箭头并查看我的所有元素。所以我认为做一个$.eachonvalue会产生任何东西,但不会产生任何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]);
    }
});

编辑:

此外,服务器正在返回一个包含一个对象的数组。如果您知道每次只收到一个对象,则可以简化为:

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 Bug也提到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 回答