<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    emu in blogjava

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      171 隨筆 :: 103 文章 :: 1052 評(píng)論 :: 2 Trackbacks
    4年前寫過一篇《腳本綁定回調(diào)》  進(jìn)行了一些有趣的嘗試,這些嘗試現(xiàn)在在一些web產(chǎn)品中已經(jīng)應(yīng)用了好幾年了。這兩年隨著海外用戶的增多,用戶情況的復(fù)雜化,我們的服務(wù)部署也開始復(fù)雜化了,有一些用戶訪問A域名失敗,訪問B域名就可能很暢順,另一些用戶則相反。而且很多時(shí)候這并不是gslb這樣的調(diào)度可以及時(shí)檢測(cè)到和快速調(diào)整的,不由得想想,能不能進(jìn)行失敗重試呢?其實(shí)也很簡單把4年前的代碼改了一改,做了一個(gè)原理性的實(shí)驗(yàn):

    <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();//如果數(shù)據(jù)被cache,運(yùn)行到這一行的時(shí)候有可能回調(diào)已經(jīng)完成,窗口已經(jīng)關(guān)閉。
            }
        }
    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{
                            loadjs(u2,cb,ec,u3)
                        }
                }
            }(errcallback,callback,url2,url3);
            i.src
    ="javascript:\"<script>function visitCountCallBack(data){frameElement.callback(data)};<\/script><script src='"+url+"'><\/script><script>setTimeout('frameElement.errcallback()',0)<\/script>\"";
            document.body.appendChild(i);
        }
    }

    function init(){
        
    var spans = document.getElementsByTagName("span");
        
    for(var i=0;i<spans.length;i++){
            
    var id = spans[i].id;
            
    var url = "http://g.qzone.qq.com/fcg-bin/cgi_emotion_list.fcg?uin=a"+id;//故意制造錯(cuò)誤引發(fā)重試
            var url2 = "http://g.qzone.qq.com/fcg-bin/cgi_emotion_list.fcg?uin=b"+id;//故意再次制造錯(cuò)誤引發(fā)重試
            var url3 = "http://g.qzone.qq.com/fcg-bin/cgi_emotion_list.fcg?uin="+id;
            
    var callback = function(id){ return function(data){
                document.getElementById(id).innerHTML 
    = data.visitcount;
                }
            }(id);
            
    var errcallback = function(id){ return function(){
                document.getElementById(id).innerHTML 
    = "無法連接到服務(wù)器";
                }
            }(id);
            loadjs(url,callback,errcallback,url2,url3);
        }
    }
    </SCRIPT>
    </HEAD>
    <BODY onload="init()">
    12345(非法帳號(hào))的訪問量:
    <span id="12345"></span><BR>
    123456 的訪問量:
    <span id="123456"></span><BR>
    20050606 的訪問量:
    <span id="20050606"></span><BR>
    </BODY>
    </HTML>

    故意在前兩次請(qǐng)求中制造了錯(cuò)誤,嘗試到第三個(gè)url的時(shí)候才成功。
    posted on 2011-07-19 20:50 emu 閱讀(2651) 評(píng)論(0)  編輯  收藏 所屬分類: web優(yōu)化
    主站蜘蛛池模板: 国产精品美女免费视频观看| 8x成人永久免费视频| 欧洲亚洲国产清在高| 亚洲精品免费网站| 黄色免费在线观看网址| 亚洲天天做日日做天天看 | 天天摸夜夜摸成人免费视频| 极品美女一级毛片免费| 亚洲高清视频免费| 亚洲av成人一区二区三区在线观看| 182tv免费视频在线观看| 亚洲久热无码av中文字幕| 国产亚洲AV无码AV男人的天堂| 久久久久国色AV免费看图片| 又硬又粗又长又爽免费看| 亚洲网站在线播放| 国产亚洲精品线观看动态图| 成年女人免费视频播放体验区| 中文字幕无线码免费人妻| 亚洲精品无码你懂的| 亚洲人成在线影院| 亚洲一区日韩高清中文字幕亚洲| 国产成人福利免费视频| 久久免费99精品国产自在现线| 亚洲日本成本人观看| 久久精品亚洲精品国产色婷| 久久精品亚洲福利| 国产成人精品免费直播| 日本最新免费网站| 国产免费爽爽视频在线观看| 免费人成视频在线播放| 亚洲日韩国产AV无码无码精品| 亚洲人成在线影院| 国产国拍精品亚洲AV片| 日韩色日韩视频亚洲网站| 亚洲线精品一区二区三区| 国产成人免费一区二区三区| 国产桃色在线成免费视频| 99ee6热久久免费精品6| 国产一级高青免费| a级毛片免费高清视频|