AJAX 기반 페이지 클래스 구현 코드
/**
* <p>pagination.js
* <p> AJAX
* @author jeanwendy
* @version 1.0
*/
var paginationIndex = 0;
var pagination = function(trTemplatId) {
$().ajaxStart(function() {
$.blockUI({
message : '<table><tr><td style="vertical-align :bottom"><font size=2pt> , ...</font></td></tr></table>'
});
}).ajaxStop($.unblockUI);
paginationIndex = paginationIndex + 1;
this.id = paginationIndex;
this.trTemplatId = trTemplatId;
this.pageNo = 1;
this.pageSize = 10;
this.beforeQuery = null;
this.afterQuery = null;
this.url = null;
this.params = null;
this.templat = null;
this.childrenCount = null;
this.setPageNo = function(pageNo) {
if (pageNo != null)
this.pageNo = pageNo;
}
this.setPageSize = function(pageSize) {
if (pageSize != null)
this.pageSize = pageSize;
}
this.setBeforeQuery = function(fn){
this.beforeQuery = fn;
}
this.setAfterQuery = function(fn){
this.afterQuery = fn;
}
this.load = function(url, params) {
// ( )
if(this.templat == null && this.childrenCount == null){
var templatObj = $('#'+this.trTemplatId);
templatObj.parent().attr('id','tbody_id'+this.id);
templatObj.removeAttr('id');
templatObj.wrap("<div id='divTemplat'></div>");
this.templat = $('#divTemplat').html();
$('#divTemplat').remove();
this.childrenCount = $('#tbody_id'+this.id).children().size();
}
//
this.url = url;
if(params == null) params = {};
$.extend(params,{pageNo:this.pageNo,pageSize:this.pageSize});
this.params = params;
var thisObj = this;
var options = {
url : url,
data : params,
async : false, //
type : 'POST',
dataType : 'json',
error : function(xmlhttp, errInfo, e) { // : :404
if (xmlhttp.status == 200) alert(' , !');
else alert(' :' + xmlhttp.status);
},
success : function(data){
//
$('#tbody_id'+thisObj.id).children().filter(':gt('+(thisObj.childrenCount-1)+')').remove();
thisObj.pageList(data.data);
thisObj.pageBar(data.total);
if($.isFunction(thisObj.afterQuery)) thisObj.afterQuery();
}
};
if($.isFunction(this.beforeQuery)) this.beforeQuery();
$.ajax(options); //
}
this.pageList = function(data){
var filedArr = this.templat.match(/\{[A-Za-z0-9_]+\}/ig);
for(var i = 0;i < data.length;i++){
var thisTemplat = this.templat;
for(var j = 0;j < filedArr.length;j++){
var key = filedArr[j].substring(1,filedArr[j].length-1);
if(key == 'NO_'){ //
var value = (this.pageNo-1)*this.pageSize + i + 1;
thisTemplat = thisTemplat.replace(new RegExp('\{'+key+'\}','gm'),value);
}else{
var value = data[i][key];
if(typeof(value) != "undefined" && value == null) value = '';
thisTemplat = thisTemplat.replace(new RegExp('\{'+key+'\}','gm'),value);
}
}
$(thisTemplat).appendTo($('#tbody_id'+this.id));
}
}
this.pageBar = function(total){
var templatObj = $(this.templat);
var delChildren = templatObj.children(':gt(0)');
delChildren.remove();
templatObj.children().attr('colspan',$(this.templat).children().size());
templatObj.children().attr('align','right');
var pageCount;
if(total % this.pageSize == 0) pageCount = total/this.pageSize;
else pageCount = parseInt(total/this.pageSize) + 1;
if(pageCount == 0) pageCount = 1;
var toolbar = " "+this.pageNo+"/"+pageCount+" ("+total+" )";
if(this.pageNo == 1) toolbar = toolbar + " ";
else toolbar = toolbar + " <a href='' id='firstPage"+this.id+"'> </a> <a href='' id='prePage"+this.id+"'> </a>";
if(this.pageNo == pageCount) toolbar = toolbar + " ";
else toolbar = toolbar + " <a href='' id='nextPage"+this.id+"'> </a> <a href='' id='lastPage"+this.id+"'> </a>";
toolbar = toolbar + " <input style='text-align:center;width:25px;height:20px;border:1 solid black' type='text' id='pageSize"+this.id+"' value="+this.pageSize+" /> ";
toolbar = toolbar + " <input style='text-align:center;width:25px;height:20px;border:1 solid black' type='text' id='pageNo"+this.id+"' value="+this.pageNo+" />";
toolbar = toolbar + " <input style='height:20px;border:1 solid black' id='goPage"+this.id+"' type='button' value='GO'>";
templatObj.children().html(toolbar);
$(templatObj.wrap("<div></div>").parent().html()).appendTo($('#tbody_id'+this.id));
var thisObj = this;
$('#firstPage'+thisObj.id).click(function(){
thisObj.pageNo = 1;
thisObj.load(thisObj.url,thisObj.params);
return false;
});
$('#prePage'+thisObj.id).click(function(){
thisObj.pageNo = parseInt(thisObj.pageNo) - 1;
thisObj.load(thisObj.url,thisObj.params);
return false;
});
$('#nextPage'+thisObj.id).click(function(){
thisObj.pageNo = parseInt(thisObj.pageNo) + 1;
thisObj.load(thisObj.url,thisObj.params);
return false;
});
$('#lastPage'+thisObj.id).click(function(){
thisObj.pageNo = pageCount;
thisObj.load(thisObj.url,thisObj.params);
return false;
});
$('#pageSize'+thisObj.id).keydown(function(e){
if(e.keyCode==13) {
var v = $('#pageSize'+thisObj.id).val();
if(!isIntGreatZero(v) || v == '0'){
alert(' , !');
$("#pageSize"+thisObj.id).focus();
return;
}
if(v > 200){
alert(' , !');
$("#pageSize"+thisObj.id).focus();
return;
}
thisObj.pageNo = 1;
thisObj.pageSize = v;
thisObj.load(thisObj.url,thisObj.params);
}
});
$('#pageNo'+thisObj.id).keydown(function(e){
if(e.keyCode==13) {
$('#goPage'+thisObj.id).triggerHandler('click');
}
});
$('#goPage'+thisObj.id).click(function(){
var v = $('#pageNo'+thisObj.id).val();
if(!isIntGreatZero(v) || v == '0'){
alert(' , !');
$("#pageNo"+thisObj.id).focus();
return;
}
if(v > pageCount){
alert(' , !');
$("#pageNo"+thisObj.id).focus();
return;
}
thisObj.pageNo = v;
thisObj.load(thisObj.url,thisObj.params);
});
}
}
//true if the string is empty
var isEmpty = function(text) {
var isEmpty = true;
for (var i = 0; i < text.length; i++) {
if (text.charAt(i) != ' ') {
isEmpty = false;
break;
}
}
return isEmpty;
}
//true if the string is int and great than zero or equals zero
var isIntGreatZero = function(str) {
if (isEmpty(str))
return false;
var temp1 = true;
var temp2 = '0123456789';
for (var i = 0; i < str.length; i++) {
var c = str.charAt(i);
if (temp2.indexOf(c) == -1) {
temp1 = false;
break;
} else {
if (c == '0' && i == 0 && str.length > 1) {
temp1 = false;
break;
}
}
}
return temp1;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AJAX의 도메인 간 액세스 - 두 가지 효과적인 해결 방법 소개새로운 W3C 정책은 HTTP 크로스 도메인 접근을 실현했고 제가 오랫동안 이 문제를 해결한 덕분입니다. servlet에서 되돌아오는 머리 정보에 Access-Control-Allow-Origin을 추가하면 됩니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.