如果索引> 0:循环; else: 只执行一次(JSON 和 jQuery)
我一直在对我在这里找到的这个 jQuery 分页脚本进行一些自定义 使用 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;
}
但我不认为这可能是最有效的方法。有什么想法吗?
I have been doing some customization to this jQuery paging script I found here
Paging Through Records Using jQuery
I've got the paging working nicely, and it is handling different javascript responses appropriately.
I have one problem though. The response is expecting the JSON to have an index/array.
90% of the time, I have multiple entries in my JSON, but sometimes I have only one item being returned. This results in zero entries.
Here is the code I've got
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
}
};
I know that I can add another check
var jsonObj = this.data[index];
if(!jsonObj){
var jsonObj=this.data;
}
if(!jsonObj) {
return;
}
and then lower down
jsonObj=this.data[index+i];
if(!jsonObj){
jsonObj=this.data;
}
But I don't think that is probably the most efficient way to do it. Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于您使用的是 jQuery,请查看 jQuery.makeArray。它接受一个数组或一个标量,并返回一个数组。如果您在前面的步骤中添加这样的调用:
您将不必担心它是标量还是数组。标量将转换为长度为 1 的数组。
Since you're using jQuery, take a look at jQuery.makeArray. It takes an array or a scalar, and returns an array. If you add a call like this in as a preceding step:
You won't have to worry about if it's a scalar or an array. Scalars will be converted to arrays of length 1.