0

我有这个适用于 i 和 i+1 的 for 循环,但 i+2 以后不起作用。错误是:

Cannot read property 'logo_sm' of undefined

这是我的代码:

var jsonObj = JSON.parse(http_request.responseText);
var rows = '';
for(var i=0;i<jsonObj.length;i=i+2){
    rows += '<tr><td class="logo_sm">' + "<img src='"+jsonObj[i].logo_sm+"'/>" + '</td><td class="logo_sm">' + "<img src='"+jsonObj[i+1].logo_sm+"'/>" + '</td><td class="logo_sm">' + "<img src='"+jsonObj[**i+2**].logo_sm+"'/>" + '</td></tr>';
    i++;
}
document.getElementsByTagName('table')[0].innerHTML += rows;

在 for 循环中,如果增量是 i++ 并且最后一列有 i+1 而不是 i+2 那么它可以工作。

看起来很简单,但仍处于学习阶段。所以,我正在努力解决它。

4

1 回答 1

0

您的 for 循环设置方式将尝试访问不存在的项目的数组索引。

如果您初始化 i=json.length 并且每次循环增加 i+2 。当 i 等于 JSON 对象的长度时,您的循环将尝试访问 JSON 对象长度加 2 的元素,这些元素不存在。

如果您只是尝试在每个表格行中输出图像,请执行以下操作:

    var jsonObj = JSON.parse(http_request.responseText);
var rows = '';
for(var i=0;i<jsonObj.length;i++)
{
    rows += "<tr><td class='logo_sm'><img src='"+jsonObj[i].logo_sm+"'/></td></tr>";
}

document.getElementsByTagName('table')[0].innerHTML += rows;
于 2013-07-21T19:25:36.650 回答