如果索引>;0:循环;else:只执行一次(JSON和jQuery)

如果索引>;0:循环;else:只执行一次(JSON和jQuery),jquery,json,paging,Jquery,Json,Paging,我已经对我在这里找到的jQuery分页脚本进行了一些定制 我已经很好地完成了分页,并且它可以适当地处理不同的javascript响应 不过我有一个问题。响应期望JSON具有索引/数组 90%的情况下,我的JSON中有多个条目,但有时只返回一个条目。这将导致零个条目 这是我的密码 var pagedContent = { data: null ,holder: null ,currentIndex : 0 ,init: function(data, holder)

我已经对我在这里找到的jQuery分页脚本进行了一些定制

我已经很好地完成了分页,并且它可以适当地处理不同的javascript响应

不过我有一个问题。响应期望JSON具有索引/数组

90%的情况下,我的JSON中有多个条目,但有时只返回一个条目。这将导致零个条目

这是我的密码

var pagedContent = {
    data: null
    ,holder: null
    ,currentIndex : 0
    ,init: function(data, holder) {
        jQuery("body").data(holder,data);
        this.holder=holder;
        this.show(0, holder); // show last
    }
    ,show: function(index, holder) {
        this.data=jQuery("body").data(holder);
        if(!this.data){
          return;
        }
        var j=2;
        if(this.data.length-index<=j){
          j=this.data.length-index-1;
        }
        var jsonObj = this.data[index];
        if(!jsonObj) {
          return;
        }
        var holdSubset="";
        for(i=0;i<=j;i++){
          jsonObj=this.data[index+i];
          this.currentIndex = index;
          if(this.holder=="id1"){
            var theResultVariables = jsonObj.whatever
            var resultInput='<div class="putstuff">'+theResultVariables+'</div>';
          }
          if(this.holder=="id2"){
            var theResultVariables = jsonObj.whatever
            var resultInput='<div class="putstuff2">'+theResultVariables+'</div>';
          }
          holdSubset= holdSubset+resultInput;
        }

        jQuery("body").html("<div id=\"counter\">"+parseFloat(index+1)+" to "+ parseFloat(index+j+1)+" of "+this.data.length+"</div>"+holdSubset+"<div class=\"prevNext\"></div>");

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

        if(index+i<this.data.length){
          var next = jQuery("<a class=\"next\">").attr("href","#").click(this.nextHandler).text("next >").data("whichList",this.holder).data("thisIndex",index + 2 +1);
          jQuery("body").append(next);
        }
    }
    ,nextHandler: function() {
        pagedContent.show(jQuery(this).data("thisIndex"), jQuery(this).data("whichList"));
        return false;
    }
    ,previousHandler: function() {
        pagedContent.show(jQuery(this).data("thisIndex"), jQuery(this).data("whichList"));
        return false
    }
};
我知道我可以再加一张支票

var jsonObj = this.data[index];
if(!jsonObj){
  var jsonObj=this.data;
}
if(!jsonObj) {
  return;
}
然后降下来

jsonObj=this.data[index+i];
if(!jsonObj){
  jsonObj=this.data;
}

但我认为这可能不是最有效的方法。有什么想法吗?

既然您正在使用jQuery,请看一下。它接受一个数组或标量,并返回一个数组。如果作为前一步在中添加类似的调用:

this.data = jQuery.makeArray(this.data);

您不必担心它是标量还是数组。标量将转换为长度为1的数组。

@pedalpete:我知道发布所有代码很有诱惑力,但是。。。不要。您在此处发布的代码中有95%(可能更多)与您的实际问题无关。你还是在强迫大家通读一遍,得出这个结论。找到再现您的问题的最小抽象代码示例对每个人都有帮助,包括那些可能有不同形状的类似问题并通过搜索来到这里的人。我确实去掉了一堆代码,但可能还不够。我想提供足够的背景,不留下问题。我正在学习这种平衡法。我会努力做得更好。