日期:2014-05-16 浏览次数:20539 次
最近项目中有这样一个需求:
页面动态刷新获取数据库中符合条件的数据的下载链接状态:如果已有可下载链接,就显示链接供用户下载,并显示服务器端当前时间;没有就继续动态获取。
?
?
实现功能:
js取服务器端时间,并动态检索下载链接,显示到页面供用户下载。
?
<script language="javascript">
var xmlhttp = null;
var interval = null;
var timeTimeout = null;
var statusValue = "";
var rtnData = new Array();
var btype;
var divContent = "";
/**
* 时间对象的格式化;
*/
Date.prototype.format = function(format){
/*
* eg:format="yyyy-MM-dd hh:mm:ss";
*/
var o = {
"M+" : this.getMonth()+1, //month
"d+" : this.getDate(), //day
"h+" : this.getHours(), //hour
"m+" : this.getMinutes(), //minute
"s+" : this.getSeconds(), //second
"q+" : Math.floor((this.getMonth()+3)/3), //quarter
"S" : this.getMilliseconds() //millisecond
}
if(/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
}
for(var k in o) {
if(new RegExp("("+ k +")").test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
}
}
return format;
}
function getFile(downUrl){
//alert('** downUrl = <%=path%>/jsp/DataRequest/downloadFile.jsp?downUrl='+ downUrl);
window.open("<%=path%>/jsp/DataRequest/downloadFile.jsp?downUrl="+ downUrl);
}
function getOs(){
var OsObject = "";
if(navigator.userAgent.indexOf("MSIE")>0) {
return "MSIE"; //IE浏览器
}
if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){
return "Firefox"; //Firefox浏览器
}
if(isSafari=navigator.userAgent.indexOf("Safari")>0) {
return "Safari"; //Safan浏览器
}
if(isCamino=navigator.userAgent.indexOf("Camino")>0){
return "Camino"; //Camino浏览器
}
if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0){
return "Gecko"; //Gecko浏览器
}
}
//页面动态调用该函数,动态获取DB中下载链接
function loadXMLDoc(xmlName,dataTypeId){
var ivkUrl = "<%=path%>/jsp/DataRequest/autoFindRtnDataGTS.jsp?xmlName=" + xmlName + "&"+ Math.random();
//alert("** ivkUrl = "+ ivkUrl);
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}else if (window.ActiveXObject){
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
if (xmlhttp){
xmlhttp.open("GET",ivkUrl,false);
btype = getOs();
if(btype != "Firefox"){
xmlhttp.onreadystatechange = state_Change;
}
xmlhttp.send(null);
if(btype == "Firefox"){
updatePageGTS();
}
}else{
alert("Your browser does not support XMLHTTP");
}
interval = window.setTimeout("loadXMLDoc('<%=xmlName%>','<%=dataTypeId%>')", 10000);
//alert("** interval = "+ interval);
//0: 等待;2:数据超大;3:无数据;99:数据获取成功
if(statusValue < 0){
window.clearTimeout(interval);
}else if(statusValue == 2){
window.clearTimeout(interval);
}else if(statusValue == 3){
window.clearTimeout(interval);
}else if(statusValue == 99){
window.clearTimeout(interval);
}
}
function state_Change(){
var dataTypeId = "<%=dataTypeId%>";
if (xmlhttp.readyState==4){
if (xmlhttp.status==200){
updatePageGTS();
}else{
//alert("Problem retrieving XML data");
}
}
}
//动态获取下载状态及下载链接地址
function updatePageGTS(){
//alert('updatePageGTS()');
rtnData = eval(xmlhttp.responseText);//获取服务端返回数据(下载链接)
if(rtnData[0]){
statusValue = rtnData[0].reqStatus;
if(statusValue < 0){
document.getElementById("statusGTS").innerHTML = "<strong>Exception</strong>";
}else if(statusValue == 0){
document.getElementById("statusGTS").innerHTML = "<strong>Being processed</strong>";
}else if(statusValue == 1){
document.getElementById("statusGTS").innerHTML = "<strong>Begin zip</strong>";
}else if(statusValue == 2){
document.getElementById("statusGTS").innerHTML = "<strong>The data