【问题标题】:javascript undefined error, but alert toSource shows the object existsjavascript未定义错误,但警告toSource显示对象存在
【发布时间】:2009-11-30 19:55:58
【问题描述】:

我通过 Luca Matteis 获取了一些代码来使用 jQuery 进行分页 Paging Through Records Using jQuery

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

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

这是我正在使用的代码

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"}]}

【问题讨论】:

  • 看起来不错...有网址吗?
  • 我还没有网址,只是在本地运行。数据库和一切都是本地的。我暂时没有位置可以放置它。

标签: javascript jquery json


【解决方案1】:

我可能发现你的代码有问题:

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

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

【讨论】:

  • 你是绝对正确的埃里克,这似乎是问题所在。现在寻求解决方案?我添加了这个
    ,show: function(index) { if(this.data.length 到 show 函数。这是你的建议吗?
  • 不,我建议避免在代码中设置固定长度,4 或 5。我不知道 index 参数的作用是什么,但是假设你要处理所有以下,你应该写 for (var i=index+1; i
【解决方案2】:

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

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

我遇到了类似的问题并通过执行上述操作解决了它。

【讨论】:

    猜你喜欢
    • 2018-11-19
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 2012-01-24
    • 2019-07-23
    相关资源
    最近更新 更多