javascript未定义错误,但警告toSource显示该对象存在

时间:2009-11-30 19:55:59

标签: javascript jquery json

我抓了一些代码用jQuery做一些分页,通过Luca Matteis这里 Paging Through Records Using jQuery

我对分页脚本进行了一些编辑,以便我可以使用相同的代码在同一站点的不同位置提供不同内容的分页。

在大多数情况下,我认为它有效,除了我在firebug中得到一个jsonObj是未定义的错误。 当我使用alert(jsonObj.toSource())时,我会看到我尝试填充的变量,但同时,脚本因错误而死亡。 我无法弄清楚为什么我会遇到“未定义”的冲突,但我可以很容易地将“未定义”值放在警报中。我甚至可以说alert(jsonObj.name),它会给我这个值,但仍然启动jsonObj是未定义的错误。

这是我正在使用的代码

var pagedContent = {
data: null
,holder: null
,currentIndex : 0
,init: function(data, holder) {
    this.data = data;
    this.holder=holder;
    this.show(0); // show last
}
,show: function(index) {
    var jsonObj = this.data[index];
    if(!jsonObj) {
        return;
    }
    var holdSubset='';
    for(i=0;i<=4; i++){
    jsonObj=this.data[index+i];
    this.currentIndex = index;
    if(this.holder=='div#firstList'){
    var returnedId = jsonObj.id;
    var returnedName = jsonObj.name;
    var calcScore=this.data[index+i].score/this.data[0].score*100;
    var resultInput="<div ' id='"+returnedId+"'><div class='name'>"+returnedName+"</div><div class='score'><div style='width:"+calcScore+"%;'></div></div>";
    } 
    if(this.holder=='div#secondList'){
    var name=jsonObj.name;
    var city=jsonObj.city;
    var region=jsonObj.state;
    var resultInput='<li><div>'+name+'</div<div>'+city+'</div><div>'+region+'</div></li>';
    }
    holdSubset= holdSubset+resultInput;
    }

    jQuery(this.holder).html('<br/>'+holdSubset);

  if(index!=0){
    var previous = jQuery("<a>").attr("href","#").click(this.previousHandler).text("< previous");
   jQuery(this.holder).append(previous);
   }

    if(index+i<this.data.length){
     var next = jQuery("<a style='float:right;'>").attr("href","#").click(this.nextHandler).text("next >");
    jQuery(this.holder).append(next);
    }
}
,nextHandler: function() {
    pagedContent.show(pagedContent.currentIndex + 5);
    return false;
}
,previousHandler: function() {
    pagedContent.show(pagedContent.currentIndex - 5);
    return false
}
};

我像这样调用函数

pagedContent.init(json.users.locations, 'div#secondList');

json看起来像这样

{"locations" : [ {"id":"21319","name":"Naugatuck American Legion","city":"Ansonia","region":"Connecticut"},{"id":"26614","name":"Studio B789","city":"Acton","region":"Maine"},{"id":"26674","name":"Deering Grange Hall","city":"Bailey Island","region":"Maine"},{"id":"27554","name":"Accu Billiards","city":"Acushnet","region":"Massachusetts"}]}

2 个答案:

答案 0 :(得分:1)

我可能发现您的代码存在问题:

for(i=0;i<=4; i++){
    jsonObj=this.data[index+i];
    (...)

当您调用show(0)时,将index设置为0.您希望数组中的项目数量固定(范围[0..4]中有5个),但数据中只有4个位置。

答案 1 :(得分:0)

如果您使用console.log来跟踪firebug中的问题,您可能会发现它是firebug的问题。尝试单独运行console.log。

如果是firebug的问题,请尝试更新它。有一些开发版本可以解决这个问题。

我遇到了类似的问题并通过上述操作修复了它。