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

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

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

    emu in blogjava

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks
    4年前寫過一篇《腳本綁定回調》  進行了一些有趣的嘗試,這些嘗試現在在一些web產品中已經應用了好幾年了。這兩年隨著海外用戶的增多,用戶情況的復雜化,我們的服務部署也開始復雜化了,有一些用戶訪問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{
                            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;//故意制造錯誤引發重試
            var url2 = "http://g.qzone.qq.com/fcg-bin/cgi_emotion_list.fcg?uin=b"+id;//故意再次制造錯誤引發重試
            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 
    = "無法連接到服務器";
                }
            }(id);
            loadjs(url,callback,errcallback,url2,url3);
        }
    }
    </SCRIPT>
    </HEAD>
    <BODY onload="init()">
    12345(非法帳號)的訪問量:
    <span id="12345"></span><BR>
    123456 的訪問量:
    <span id="123456"></span><BR>
    20050606 的訪問量:
    <span id="20050606"></span><BR>
    </BODY>
    </HTML>

    故意在前兩次請求中制造了錯誤,嘗試到第三個url的時候才成功。
    posted on 2011-07-19 20:50 emu 閱讀(2660) 評論(0)  編輯  收藏 所屬分類: web優化
    主站蜘蛛池模板: 四虎免费大片aⅴ入口| 好看的亚洲黄色经典| 一区二区三区免费在线观看| 亚洲中久无码不卡永久在线观看| 伊人久久大香线蕉免费视频| 久久久久亚洲AV无码观看| 女人张开腿等男人桶免费视频| 一个人免费播放在线视频看片 | 亚洲夜夜欢A∨一区二区三区| 91成人在线免费视频| 久久久久久久久无码精品亚洲日韩| 中文字幕亚洲图片| 免费无码又黄又爽又刺激| 免费又黄又爽又猛大片午夜| 99ri精品国产亚洲| 国产91在线免费| 最近新韩国日本免费观看| 黄网站在线播放视频免费观看| 亚洲今日精彩视频| 亚洲黄片毛片在线观看| 1000部啪啪未满十八勿入免费| 男女猛烈无遮掩视频免费软件| 亚洲婷婷天堂在线综合| 亚洲综合熟女久久久30p| 免费鲁丝片一级在线观看| 99久久99久久精品免费观看| 一级黄色毛片免费看| 亚洲欧美第一成人网站7777| 亚洲国产精品VA在线看黑人| avtt亚洲天堂| 国内自产少妇自拍区免费| 啦啦啦完整版免费视频在线观看 | 一级女性全黄久久生活片免费 | www亚洲精品少妇裸乳一区二区| 91热成人精品国产免费| 手机看片国产免费永久| 偷自拍亚洲视频在线观看99| 在线亚洲高清揄拍自拍一品区| 亚洲男人都懂得羞羞网站| 亚洲综合AV在线在线播放| 免费国产成人午夜私人影视|