0

我有一个 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,另一个是过滤的。

    [{"name":"888-12-993-99-1","id":"1","dict_value":"compact"},{"name":"888-22-SR1-RTR-1 ","id":"2","dict_value":"compact"},{"name":"888-21-SR1-SW-1","id":"3","dict_value":"compact "},{"name":"888-11-SR2-SW-2","id":"4","dict_value":"compact"},....等

    [{"parent_id":"2","tag_id":"10","Location":"Building1","id":"7","name":"888-22-228-22-1", "label":null,"asset_no":"1026067","objtype_id":"1503"},{"parent_id":"2","tag_id":"5","Location":"Building2","id ":"6","name":"888-2-263-88-1","label":null,"asset_no":"1026068","objtype_id":"1503"}, .... 等.

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

    [17:13:30.675] 类型错误:“objectid 是:”.objswitch 未定义

我不太确定如何解决这个问题。任何建议,将不胜感激。如果这是一个愚蠢的错误,我提前道歉!我一整天都在编程,我的大脑一片混乱!=)

在此先感谢您的帮助。

4

2 回答 2

3

除非我完全离开它看起来.objswitch应该是+ objswitch

尝试

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

代替

console.log('objectid is:'.objswitch.id);
于 2012-09-20T21:23:02.860 回答
1

看起来你的连接语法是错误的。应该使用+来完成,我看到你使用的是. 而不是 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));
});
于 2012-09-20T21:22:40.963 回答