当前位置:编程学习 > JAVA >>

脚本绑定回调增强版:备用url可以失败重试

这两年随着海外用户的增多,用户情况的复杂化,我们的服务部署也开始复杂化了,有一些用户访问A域名失败,访问B域名就可能很畅顺,另一些用户则相反。而且很多时候这并不是gslb这样的调度可以及时检测到和快速调整的,不由得想想,能不能进行失败重试呢?其实也很简单把4年前的代码改了一改,做了一个原理性的实验:

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
var isIE = !!window.ActiveXObject;
var useFragment=false;
function loadjs(url,callback,errcallback,url2,url3){
    if(isIE){
        if(useFragment){
           var df = document.createDocumentFragment();   
            df.visitCountCallBack = function(data){
                s.onreadystatechange=null;
                df=null;
                callback(data);
            }
            var s = df.createElement("SCRIPT");
            df.appendChild(s);
            s.onreadystatechange=function (ec,cb,u2,u3){
                return function(){
                    if(s.readyState=="loaded") {
                        s.onreadystatechange=null;
                        df=null;
                        if(!u2){
                            ec();
                        }else{
                            loadjs(u2,cb,ec,u3)
                        }
                    }
                }
            }(errcallback,callback,url2,url3)
            s.src = url;
        }else{
            var i=new ActiveXObject("htmlfile");
            i.open();
            i.parentWindow.visitCountCallBack=function(i){
                return function(d){
                    i.parentWindow.errcallback=null;
                    i=null;
                    callback(d);
                }
            }(i);
            i.parentWindow.errcallback=function(ec,cb,u2,u3){
                return function(){
                    i.parentWindow.errcallback=null;
                    i=null;
                    if(!u2){
                        ec();
                    }else{
                        loadjs(u2,cb,ec,u3)
                    }
                }
            }(errcallback,callback,url2,url3)
            i.write("<script src=\""+url+"\"><\/script><script defer>setTimeout(\"errcallback()\",0)<\/script>")
            if(i)i.close();//如果数据被cache,运行到这一行的时候有可能回调已经完成,窗口已经关闭。
        }
    }else{
        var i = document.createElement("IFRAME");   
        i.style.display="none";
        i.callback=function(o){
            callback(o);
            i.contentWindow.callback=null;
            i.src="about:blank"
            i.parentNode.removeChild(i);
            i = null;
        };
        i.errcallback = function(ec,cb,u2,u3){
            return function(){
                    if(!u2){
                        ec();
                    }else{
              &n

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,