元素列表后的Json错误:缺失]

时间:2011-04-19 08:02:44

标签: jquery json append

在尝试将部分Json字符串传递给函数时,我收到以下错误:

  元素列表

缺少]

Json字符串如下所示: -

var data = [
    {
        id: 1, name: "254201075698", series: [
            { 
                name: "", 
                reference: "254201075698",
                note: "A test note", 
                color: "#f0f0f0" 
            }
        ]
    }, 
    {
        id: 2, name: "254201075699", series: [
            { 
                name: "", 
                reference: "254201075699",
                note: "A test note", 
                color: "#e0e0e0" 
            }
        ]
    }
];

在for循环中,我尝试执行以下操作: -

item.append(jQuery("<div>", {
                    "class": "",
                    "css": { ""}
                }).append('<a href="javascript:void(0);" title="View details on '+data[i].name+'" onClick="showInfoDialog('+data[i].series+');return false;">'+data[i].name+'</a>'));

但showInfoDialog参数似乎抛出错误,我不知道为什么,有什么想法?

showInfoDialog看起来像: -

function showInfoDialog(data) {    
    console.log(data);    
    clearMessages();
    var html ='';
    var id = data.id;           
    html += '<p><label for="client">Reference: </label> '+data.reference+'</p>';
    $('#dialogContainer').html(html);
    $('#loader').hide();
    $('.dialogDiv').dialog('option', 'title', data.reference);
    $(".dialogDiv").dialog('open');
}

For循环: -

for (var i = 0; i < data.length; i++) {

}

4 个答案:

答案 0 :(得分:2)

你不能这样做....

 onClick="showInfoDialog('+data[i].series+')

它只会将其转换为showInfoDialog([object Object]) - 您需要 jsonify data [i] .series - 或者更好的是,只需附加一个click事件。< / p>

jQuery('<a href="javascript:" title="View details on '+data[i].name+'">')
    .html(data[i].name)
    .click(function() {
        showInfoDialog(data[i].series);
    })
    .wrap('<div></div>')
    .appendTo(item);

答案 1 :(得分:1)

`onClick="showInfoDialog('+data[i].series+');return false;">'` ...

data [i] .series是一个数组,但你似乎并没有在showInfoDialog()函数中将它用作数组:

答案 2 :(得分:1)

blah blah blah ... onClick="showInfoDialog('+data[i].series+'); ... blah blah blah

这是您的错误所在。

data[i].series是一个数组对象。它使用toString转换为文本,默认情况下输出“[object object]”或类似的东西。您需要先将该数组转换为JSON(例如JSON.stringify)。

或者,你可以这样做:

blah blah blah ... onClick="showInfoDialog(data[' + i + '].series); ... blah blah blah

它只是在寻找一个名为“data”的全局变量(假设您的var data是全局可访问的)。例如,如果i = 42,则字符串将变为:

blah blah blah ... onClick="showInfoDialog(data[42].series); ... blah blah blah

答案 3 :(得分:0)

你说你正在使用for-in循环,我假设它迭代data数组。

您永远不应该使用for-in来迭代数组,因为您很可能会返回Array基类的成员以及数组元素本身。查看this JSFiddle

代码:

for (var x in data){
    alert(data[x]); //shed-loads of alerts!
}

for (var x in data){
    //can use this
    if (data.hasOwnProperty(x)){
        alert(data[x]);
    }
}

//best just iterate with a standard for loop
for (var x=0; x<data.length; x++){
    alert(data[x]);
}

使用从0循环到data.length的for循环(如上所述)