/* * 云存储上传封装使用类 */ function storageservices() { _this = this; ///////////需要的变量///////// this.updater = undefined; this.progress = undefined; this.requestcount = 0; this.oldaction; //修改设置之间的action地址 this.oldtarget;//修改设置之间的target this.oldencoding; //////////需要外部设置的参数///////// this.formid = "";//当前表单的名称 this.uploadurl = "";//云存储上传路径 this.uploadresultajaxurl = ""; //获取上传结果的ajax 的url this.uploadstateajaxurl = "";//获取上传状态的 ajax 的url this.uploadstateechodivid = "";//上传状态回显div 的编号 this.formtargetname = "";//form提交的目标的地址 this.handleerrfunction;//错误时需要回调处理的函数 this.handlesucceedfunction;//上传成功时需要回调处理的函数 } string.prototype.trim = function() { var t = this.replace(/(^\s*)|(\s*$)/g, ""); return t.replace(/(^ *)|( *$)/g, ""); } storageservices.prototype = { //启动方法 startstatuscheck:function () { var formobj = document.getelementbyid(_this.formid); //记录之间的参数 _this.oldaction=formobj.action; _this.oldtarget=formobj.target; _this.oldencoding = formobj.encoding; //设置新的参数 formobj.action = _this.uploadurl; formobj.target = _this.formtargetname; formobj.setattribute('enctype', 'multipart/form-data'); formobj.encoding = 'multipart/form-data'; //调用回调参数 获取结果和上传进度进度参数 //_this.updater = new ajax.periodicalupdater('',_this.uploadresultajaxurl,{asynchronous:true, frequency:2, method: 'get', onfailure: _this.reporterror,onsuccess : _this.readjson}); //_this.progress = new ajax.periodicalupdater(_this.uploadstateechodivid,_this.uploadstateajaxurl,{asynchronous:true, frequency:2, method: 'get', onfailure: _this.myerror}); //获取结果回调函数 _this.updater = new storageservicesperiodicalupdater(); _this.updater.setajaxurl(_this.uploadresultajaxurl); _this.updater.setpostasynchronous(true) _this.updater.setpostfrequency("500") _this.updater.setpostmethod("get"); _this.updater.onfailure(_this.reporterror) _this.updater.onsuccess(_this.readjson) _this.updater.start(); //显示状态的回调回调函数 _this.progress = new storageservicesperiodicalupdater(); _this.progress.setajaxurl(_this.uploadstateajaxurl); _this.progress.setuploadstate(_this.uploadstateechodivid); _this.progress.setpostasynchronous(true) _this.progress.setpostfrequency("500") _this.progress.setpostmethod("get"); _this.progress.onfailure(_this.myerror) _this.progress.start(); }, //读取成功时调用的方法 readjson:function (request) { var content = request.responsetext; if(content=="\r\n") { //alert(requestcount); if(request.status!=200) requestcount++; //三次请求不到,则提示错误 if(_this.requestcount==3) { alert("存储节点访问出错,请和管理员联系!") //清除之前的settimeout任务 _this.stopajax(); _this.handleerrfunction(); return ; } }else { try { var json=eval("("+content+")"); if(json.status=="end") { try { //回调外部使用的函数 eval( "var _function = " + _this.handlesucceedfunction); _function(json); }catch(e) { alert(e) } //停止定时器 _this.stopajax(); settimeout("_this.progress.stop()",500); } //上传失败 if(json.result=="false") { if(json.errorinfo!="") { alert(json.errorinfo); _this.stopajax(); settimeout("_this.progress.stop()",500); _this.handleerrfunction(); } } }catch(e){ return;} } }, stopajax:function () { settimeout("_this.updater.stop()",100); }, myerror:function (request) { settimeout("_this.progress.stop()",100); }, reporterror:function(request) { var content = request.responsetext; alert("请求失败"+request.status); //清除之前的settimeout任务 _this.stopajax(); _this.handleerrfunction(); }, //回调错误处理函数,需要在外部设置 handleerrfunction:function() { try{ if(_this.handleerrfunction!="") { eval(_this.handleerrfunction+"()"); } }catch(e) { } }, //将action的地址之前的地址 recoverform:function() { var formobj = document.getelementbyid(_this.formid); formobj.action= _this.oldaction; formobj.target = _this.oldtarget; formobj.setattribute('enctype', _this.oldencoding); formobj.encoding = _this.oldencoding; } }; /*回调封装函数 * 内部使用 */ function storageservicesperiodicalupdater() { var ajaxurl = "";//请求ajax地址 var uploadstate = "";//回显div编号 var asynchronous = true; //ajax 参数是否异步 var frequency = "500"; //ajax 调用频率 毫秒数 var method = "get"; //ajax 请求方式 var onfailure = ""; //失败调用的函数 var onsuccess = ""; //成功调用的函数 var isrun = false; //是否运行 var isstop = false; //是否停止 var id = ""; var xmlhttp; //ajax 对象 //启动函数 this.start = function() { if(isstop) { return; } if(!isrun) { isrun = true; } //调用ajax函数 xmlhttp = createxmlhttprequest(); startrequest(ajaxurl,operationresult,xmlhttp) //定时在调用自己循环执行,调用成功,失败或者外部停止 settimeout(arguments.callee,frequency); } //停止调用 供外部调用 this.stop = function() { isstop = true; } this.setajaxurl = function(p1) { ajaxurl = p1; } this.setid = function(p1) { id = p1; } this.setuploadstate = function(p1) { uploadstate = p1; } this.setpostasynchronous = function(p1) { asynchronous = p1; } this.setpostfrequency = function(p1) { frequency = p1; } this.setpostmethod = function(p1) { method = p1; } this.onfailure = function(p1) { onfailure = p1; } this.onsuccess = function(p1) { onsuccess = p1; } //ajax 回调处理 function operationresult() { //获取状态成功 if(xmlhttp.readystate == 4 && xmlhttp.status == 200) { //如果设置了成功的回调函数就调用 if(onsuccess!="") { callfunction(onsuccess,xmlhttp); } //如果设置了回显的标签编号就回显 var rt = xmlhttp.responsetext.trim(); if(uploadstate!="" && rt!="") { document.getelementbyid(uploadstate).innerhtml = rt; } }else { //处理错误,先做简单处理 除了200以外都当作错误处理 if(xmlhttp.readystate == 4 && xmlhttp.status != 200) { try{ if(onfailure!="") { callfunction(onfailure,xmlhttp); } }catch(e) { } } } } //执行一个带参数的函数 function callfunction(functionname,o) { eval( "var _function = " + functionname); _function(o); } //ajax进行请求 function startrequest(url, fun,xmlhttp) { xmlhttp.onreadystatechange = fun; xmlhttp.open(method,url,asynchronous); xmlhttp.send(null); } //创建ajax对象 function createxmlhttprequest() { var xmlhttp = null; try{ xmlhttp = new activexobject("microsoft.xmlhttp"); } catch(e) { try { xmlhttp = new activexobject("msxml2.xmlhttp"); } catch(e) { try{ xmlhttp = new xmlhttprequest(); }catch(e){ } } } return xmlhttp; } } function storageservicesgetrelatevsl() { var ajaxurl = "/system/resource/storage/service/services.jsp?actiontype=getrelatevsl";//请求ajax地址 var type = ""; var callbackfunction = ""; //回调函数 var imagepath= "";//图片地址 var xmlhttp; this.settype = function(p1) { type = p1; } this.setcallbackfunction = function(p1) { callbackfunction = p1; } this.setimagepath = function(p1) { imagepath = p1; } this.start = function() { ajaxurl += "&imagepath="+imagepath+"&type="+type; //调用ajax函数 xmlhttp = createxmlhttprequest(); startrequest(ajaxurl,operationresult,xmlhttp) } //ajax 回调处理 function operationresult() { //获取状态成功 if(xmlhttp.readystate == 4 && xmlhttp.status == 200) { callfunction(callbackfunction,xmlhttp.responsetext); }else { } } //ajax进行请求 function startrequest(url, fun,xmlhttp) { xmlhttp.onreadystatechange = fun; xmlhttp.open("get",url,false); xmlhttp.send(null); } //创建ajax对象 function createxmlhttprequest() { var xmlhttp = null; try{ xmlhttp = new activexobject("microsoft.xmlhttp"); } catch(e) { try { xmlhttp = new activexobject("msxml2.xmlhttp"); } catch(e) { try{ xmlhttp = new xmlhttprequest(); }catch(e){ } } } return xmlhttp; } //执行一个带参数的函数 function callfunction(functionname,o) { eval( "var _function = " + functionname); _function(o); } }