个人征信系统完成,花了一天时间导入了N多人的数据,自我欣赏了好几天,把所有认识的人都查了一下。难过的准确率,和不太满意的查找率。这是数据质量的问题不说了……
后台还是使用asp写的,但是程序构成方法有了很大的转变,过去html直接加入asp代码的日子已经结束了。使用了所谓的webservices使后台编程的难度降低了很多,也减轻了服务器的负担。在这个ws里我使用了很简单的rest协议。通过这个协议,简单实现整个流程,发送一个id=****,获得一个xml文档回执,问题变得如此简单了,前台用javascript 获得数据一一放入到需要的地方。这种方法唯一会让人感到高兴的是:看到的页面都是.htm
两段代码
1、所有的事情交给浏览器做,当然页面间的全局变量最好的方法是Cookie。这样服务器获得数据后,无论什么页面随用随取,自由自在。
function SetCookie(name,value) // 两个参数,一个是cookie的名子,一个是值
... {
var Days = 1; //此 cookie 将被保存 1 天
var exp = new Date(); //new Date("December 31, 9998");
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
function getCookie(name) // 取cookies函数
... {
var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
if(arr != null) return unescape(arr[2]); return null;
}
function delCookie(name) // 删除cookie
... {
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
// SetCookie ("xiaoqi", "3")
// alert(getCookie('xiaoqi'));
2、数据翻页代码 做成了 [上一页][1][2][3][4][5][6][7][8][下一页] 这类形式翻页只是对小数据量最好,我的100条数据很快,打数据量还是按原始方法,传来数据分成10页,无刷新翻页,速度自然是快的惊人。
var oSize, oCount, oPosition, strList = '';
var oTarget = oArg;
var oTable = document.all['oTable'];
var oData = document.all['oData'];
var oRecordSet = oData.recordset;
oSize = oTable.dataPageSize;
oRecordSet.PageSize = oSize;
oCount = oRecordSet.PageCount;
oPosition = oRecordSet.AbsolutePage;
if (oTarget<1) ...{ oTarget = 1; }
if (oTarget>oCount) ...{ oTarget = oCount; }
while (oPosition!=oTarget) ...{
if (oPosition<oTarget) ...{
oRecordSet.AbsolutePage ++;
oPosition = oRecordSet.AbsolutePage;
oTable.nextPage();
} else ...{
oRecordSet.AbsolutePage --;
oPosition = oRecordSet.AbsolutePage;
oTable.previousPage();
}
}
var oPage = document.all['oPage'];
for (var i=1; i<=oCount; i++) ...{
strList += '[<a href= "javascript:ToPage(' + i + '); void 0;" class="a">';
strList += (oRecordSet.AbsolutePage!=i) ? i : '<b>' + oRecordSet.AbsolutePage + '</b>' ;
strList += '</a>] ';
}
if (oRecordSet.AbsolutePage>1)
...{
strList = '[<A HREF="javascript:ToPage('+(oRecordSet.AbsolutePage-1)+'); void 0;" class="a">上一页</A>] ' + strList
}
if (oRecordSet.AbsolutePage != oCount)
...{
strList = strList + '[<A HREF="javascript:ToPage('+(oRecordSet.AbsolutePage+1)+');void 0;" class="a">下一页</A>]'
}
//strList = strList.substr(0, strList.length-12);
oPage.innerHTML = strList;
}
function setList() ... {
var oSize, oCount, strList = '';
var oTable = document.all['oTable'];
var oData = document.all['oData'];
var oRecordSet = oData.recordset;
oSize = oTable.dataPageSize;
oRecordSet.PageSize = oSize;
oCount = oRecordSet.PageCount;
var opagecount = document.all['opagecount'];
$('opagecount').innerHTML =' 搜索共得到<font color="#FF0000">' + oRecordSet.recordcount + '</font>个结果,共<font color="#FF0000">' + oCount + '</font>页';
var oPage = document.all['oPage'];
for (var i=1; i<=oCount; i++) ...{
strList += '[<a href="javascript:ToPage(' + i + '); void 0;" class="a">';
strList += (oRecordSet.AbsolutePage!=i) ? i : '<b>' + i + '</b>' ;
strList += '</a>] ';
}
if (oCount > 1)
...{
strList = strList + '[<A HREF="javascript:ToPage('+(oRecordSet.AbsolutePage+1)+'); void 0;" class="a">下一页</A>]'
}
//strList = strList.substr(0, strList.length-12);
oPage.innerHTML = strList;
}
// <table id="oTable" width="90%" align="center" border="0" cellPadding="0" cellSpacing="0" dataSrc="#oData" dataPageSize="10">
// <span id="oPage"></span>
获取数据使用了ajax,这样会让用户感觉上速度很快。prototype 1.5使用让我节约了不少时间,而且在学习中时刻震惊js的强大。
function getXML()
... {
$('oTable').style.visibility = "hidden";
var url = 'asp/resaultin.asp';
var pars = quest;
var myAjax = new Ajax.Updater(
'myxml',
url,
...{
method: 'get',
parameters: pars,
onComplete:onready
});
}
js的事件和windows里很像,所以发现以前学习的东西还是很有用的。prototype直接一句话
function showMessage() ... {
$('oTable').style.visibility = "visible";
}
最后用了别人的tab 控件,日期控件,和lightbox--thicjbox--最后换成greybox 效果虽然还觉得有点差异,不过已经很满意了。