迭代并显示json数据

时间:2012-09-20 21:18:04

标签: javascript jquery ajax codeigniter-2

我有一个codeigniter应用程序,在我的一个视图中,我对一个返回json数据的API进行了ajax调用。获得数据后,我遍历它并将记录追加到现有表中。 运行此ajax调用有两种方法。一种是请求“所有”数据,另一种是按位置过滤。 两种方式都返回数据,但是当我试图遍历过滤的数据集时,ajax失败了。

这是循环记录集的代码:

if (JSONdata.length != 0) 
{
        //create a heading row and attach it to the existing table.
        var heading = $('<tr id="tblheading" naming="tblheading">').appendTo($('#switchrecords'));
        heading.append($('<td>').append().text('Name'));
        heading.append($('<td>').append().text('Object ID'));

        //loop through each JSONdata item in the array and append another row to the switchrecords table.
        $.each(JSONdata, function(i, objswitch) {                           
            console.log('objectid is:'.objswitch.id);
            console.log(objswitch.id);
            var row = $('<tr>').appendTo($('#switchrecords'));
            row.append($('<td>').append($('<a href='+ BASEPATH + 'index.php/controller/methodname/' + objswitch.id + '>').text(objswitch.name)));
            row.append($('<td>').append(objswitch.id).text(objswitch.id));
});

这是我到目前为止所做的:

  1. 我确保两个结果集都有相同的字段,即“id”和“name”。请注意,过滤后的数据集包含的字段多于非过滤结果,但我认为这不重要。

  2. 我已经使用console.log来转储两个结果集......这是两者的片段。第一个是ALL,另一个是过滤的。

    [{ “名称”: “888-12-993-99-1”, “ID” 为 “1”, “dict_value”: “紧凑”},{ “名称”:“888-22-SR1- RTR-1" , “ID”: “2”, “dict_value”: “紧凑”},{ “名称”: “888-21-SR1-SW-1”, “ID”: “3”, “dict_value” : “紧凑型”},{ “名称”: “888-11-SR2-SW-2”, “ID”: “4”, “dict_value”: “紧凑”},....等

    [{ “PARENT_ID”: “2”, “TAG_ID”: “10”, “位置”: “号楼”, “ID”: “7”, “名称”:“888-22-228-22- 1" , “标签”:NULL, “asset_no”: “1026067”, “objtype_id”: “1503”},{ “PARENT_ID”: “2”, “TAG_ID”: “5”, “位置”: “Building2” ,“id”:“6”,“name”:“888-2-263-88-1”,“label”:null,“asset_no”:“1026068”,“objtype_id”:“1503”},.. ..等等。

  3. 正如您从代码片段中看到的,我尝试添加一些调试信息以查看循环内部发生的情况。但是,我在第一个console.log()调用时收到以下错误消息:

    [17:13:30.675] TypeError:“objectid is:”。objswitch未定义

  4. 我真的不太清楚如何解决这个问题。任何建议,将不胜感激。 如果这是一个愚蠢的错误我提前道歉!我整天都在编程,我的大脑很难受! =)

    提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

除非我完全关闭,否则.objswitch应该是+ objswitch

尝试

console.log('objectid is:' + objswitch.id);

而不是

console.log('objectid is:'.objswitch.id);

答案 1 :(得分:0)

看起来您的语法连接错误。应该使用 + 来完成,我看到您使用的是 而不是objswitch尝试使用此

$.each(JSONdata, function(i) {                           
    console.log('objectid is:' +  this.id);
    console.log(this.id);
    var row = $('<tr>').appendTo($('#switchrecords'));
    row.append($('<td>').append($('<a href='+ BASEPATH + 'index.php/switches/getswitchdetails/' + this.id + '>').text(this.name)));
    row.append($('<td>').append(this.id).text(this.id));
});

否则尝试使用一般的变量

$.each(JSONdata, function(i) {                           
    console.log('objectid is:'+  JSONdata[i].id);
    console.log(JSONdata[i].id);
    var row = $('<tr>').appendTo($('#switchrecords'));
    row.append($('<td>').append($('<a href='+ BASEPATH + 'index.php/switches/getswitchdetails/' + JSONdata[i].id + '>').text(JSONdata[i].name)));
    row.append($('<td>').append(JSONdata[i].id).text(JSONdata[i].id));
});