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

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

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

    posts - 22,comments - 35,trackbacks - 0

    在ajax應(yīng)用中,通常一個頁面要同時發(fā)送多個請求,如果只有一個XMLHttpRequest對象,前面的請求還未完成,后面的就會把前面的覆蓋掉,如果每次都創(chuàng)建一個新的XMLHttpRequest對象,也會造成浪費(fèi)。解決的辦法就是創(chuàng)建一個XMLHttpRequset的對象池,如果池里有空閑的對象,則使用此對象,否則將創(chuàng)建一個新的對象。

    下面是我最近寫的一個簡單的類:

    /**
    ?*?XMLHttpRequest?Object?Pool
    ?*
    ?*?@author????legend?<legendsky@hotmail.com>
    ?*?@link??????http://www.ugia.cn/?p=85
    ?*?@Copyright?www.ugia.cn
    ?*/?

    var? XMLHttp? =?{
    ????
    _objPool :?[],

    ????
    _getInstance :?function?()
    ????{
    ????????for?(var?
    i? =? 0 ;? i? <? this . _objPool . length ;? i? ++)
    ????????{
    ????????????if?(
    this . _objPool [ i ]. readyState? ==? 0? ||? this . _objPool [ i ]. readyState? ==? 4 )
    ????????????{
    ????????????????return?
    this . _objPool [ i ];
    ????????????}
    ????????}

    ????????
    //?IE5中不支持push方法
    ????????
    this . _objPool [ this . _objPool . length ]?=? this . _createObj ();

    ????????return?
    this . _objPool [ this . _objPool . length? -? 1 ];
    ????},

    ????
    _createObj :?function?()
    ????{
    ????????if?(
    window . XMLHttpRequest )
    ????????{
    ????????????var?
    objXMLHttp? =?new? XMLHttpRequest ();

    ????????}
    ????????else
    ????????{
    ????????????var?
    MSXML? =?[ 'MSXML2.XMLHTTP.5.0' ,? 'MSXML2.XMLHTTP.4.0' ,? 'MSXML2.XMLHTTP.3.0' ,? 'MSXML2.XMLHTTP' ,? 'Microsoft.XMLHTTP' ];
    ????????????for(var?
    n? =? 0 ;? n? <? MSXML . length ;? n? ++)
    ????????????{
    ????????????????
    try
    ????????????????
    {
    ????????????????????var?
    objXMLHttp? =?new? ActiveXObject ( MSXML [ n ]);
    ????????????????????break;
    ????????????????}
    ????????????????
    catch ( e )
    ????????????????{
    ????????????????}
    ????????????}
    ?????????}??????????

    ????????
    //?mozilla某些版本沒有readyState屬性
    ????????
    if?( objXMLHttp . readyState? ==? null )
    ????????{
    ????????????
    objXMLHttp . readyState? =? 0 ;

    ????????????
    objXMLHttp . addEventListener ( "load" ,?function?()
    ????????????????{
    ????????????????????
    objXMLHttp . readyState? =? 4 ;

    ????????????????????if?(
    typeof?objXMLHttp . onreadystatechange? ==? "function" )
    ????????????????????{
    ????????????????????????
    objXMLHttp . onreadystatechange ();
    ????????????????????}
    ????????????????},??
    false );
    ????????}

    ????????return?
    objXMLHttp ;
    ????},

    ????
    //?發(fā)送請求(方法[post,get],?地址,?數(shù)據(jù),?回調(diào)函數(shù))
    ????
    sendReq :?function?( method ,? url ,? data ,? callback )
    ????{
    ????????var?
    objXMLHttp? =? this . _getInstance ();

    ????????
    with ( objXMLHttp )
    ????????{
    ????????????
    try
    ????????????
    {
    ????????????????
    //?加隨機(jī)數(shù)防止緩存
    ????????????????
    if?( url . indexOf ( "?" )?>? 0 )
    ????????????????{
    ????????????????????
    url? +=? "&randnum="? +? Math . random ();
    ????????????????}
    ????????????????else
    ????????????????{
    ????????????????????
    url? +=? "?randnum="? +? Math . random ();
    ????????????????}

    ????????????????
    open ( method ,? url ,? true );

    ????????????????
    //?設(shè)定請求編碼方式
    ????????????????
    setRequestHeader ( 'Content-Type' ,? 'application/x-www-form-urlencoded;?charset=UTF-8' );
    ????????????????
    send ( data );
    ????????????????
    onreadystatechange? =?function?()
    ????????????????{
    ????????????????????if?(
    objXMLHttp . readyState? ==? 4? &&?( objXMLHttp . status? ==? 200? ||? objXMLHttp . status? ==? 304 ))
    ????????????????????{
    ????????????????????????
    callback ( objXMLHttp );
    ????????????????????}
    ????????????????}
    ????????????}
    ????????????
    catch ( e )
    ????????????{
    ????????????????
    alert ( e );
    ????????????}
    ????????}
    ????}
    };?

    示例:

    < script?type = "text/javascript"? src = "xmlhttp.js" > </script>
    <script?type="text/javascript">
    function?test(obj)
    {
    ????alert(obj.statusText);
    }

    XMLHttp.sendReq('GET',?'http://www.ugia.cn/wp-data/test.htm',?'',?test);
    XMLHttp.sendReq('GET',?'http://www.ugia.cn/wp-data/test.htm',?'',?test);
    XMLHttp.sendReq('GET',?'http://www.ugia.cn/wp-data/test.htm',?'',?test);
    XMLHttp.sendReq('GET',?'http://www.ugia.cn/wp-data/test.htm',?'',?test);

    alert('Pool?length:'?+?XMLHttp._objPool.length);
    </script>?

    源代碼里有中文的注釋,是ansi的,如果你的網(wǎng)站或ie下選擇編碼為UTF-8,可能會導(dǎo)致錯誤,你把你ie的編碼改成gb2312看看,或者去掉文件里的中文注釋

    posted on 2006-11-18 13:38 kelven 閱讀(413) 評論(1)  編輯  收藏 所屬分類: Ajax

    FeedBack:
    # re: XMLHttpRequest對象池
    2008-03-07 15:16 | wq
    不錯




    Java架構(gòu)俱樂部,QQ群2826942 ,交流Java架構(gòu),領(lǐng)域模型,設(shè)計(jì)模式,AOP,IOC,輕量級,DDD,項(xiàng)目管理,設(shè)計(jì)思想等問題,聚集經(jīng)驗(yàn)豐富的高級程序員,架構(gòu)師,項(xiàng)目經(jīng)理等交流以上層面較高的問題。歡迎各位有識之士加入,共同探討、發(fā)表高見、廣結(jié)精英。為了使各位成員免受無聊信息和低端問題的打擾,請盡量避免討論代碼實(shí)現(xiàn)等入門級問題,維護(hù)本群的氛圍和討論質(zhì)量。新手勿加  回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲 另类 无码 在线| 亚洲日韩乱码中文无码蜜桃臀| 久久福利青草精品资源站免费 | 亚洲欧洲另类春色校园小说| 成人免费午夜视频| 国产精品免费久久| 久久青青草原亚洲av无码app| 女人张腿给男人桶视频免费版 | 无码一区二区三区AV免费| 污污免费在线观看| 亚洲视频在线观看网址| 国产精品无码素人福利免费| 99视频免费在线观看| 亚洲人成小说网站色| 亚洲乳大丰满中文字幕| 成人片黄网站色大片免费| 免费黄网站在线观看| 久久无码av亚洲精品色午夜 | 亚洲精品无码专区久久久| 成年美女黄网站色大免费视频| a级特黄毛片免费观看| 亚洲爆乳精品无码一区二区| 亚洲天天做日日做天天欢毛片 | 亚洲综合国产成人丁香五月激情 | 毛片a级毛片免费播放100| 两个人看的www免费| 日韩成人精品日本亚洲| 亚洲另类春色校园小说| 国产l精品国产亚洲区在线观看| 国产免费人成视频在线观看| 4hu四虎最新免费地址| 日本免费污片中国特一级| 男女啪啪免费体验区| 亚洲日韩精品无码专区| 久久精品国产亚洲AV香蕉| 国产综合亚洲专区在线| 亚洲高清无码在线观看| 日韩免费观看视频| 日韩av无码成人无码免费| 18观看免费永久视频| 久久久久国产精品免费免费不卡|