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

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

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

    Habitat Framework

    專注于Java EE企業(yè)級(jí)開發(fā)
    posts - 13, comments - 81, trackbacks - 0, articles - 5
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    使用AJAX不可以跨域一直是一個(gè)麻煩的問題,
    最近做AJAX框架時(shí)發(fā)現(xiàn)一種方法,不僅可以跨域,而且相比XHR可以省去很多解析XML的步驟,
    后來居然發(fā)現(xiàn)GoogleMap的API就在用,非常驚喜,趕快分享一下

    test.html
    <html>
    <title>Dynamic Script Object</title>
    <head/>
    <body>
     <div id="jsArea">
      <script id="js" src=testa.js></script>
     </div>
     <br>
     <input type="button" value="test" onclick="testSrc()">
    </body>
    </html>
    <script>
    //author:Kerwin.Weng
    //mail:hunteva@163.com
     function testSrc(){
      var jsObj = document.getElementById("js");
      var body = jsObj.parentNode;
      body.removeChild(jsObj);
      jsObj = null;
      var newJS=document.createElement("script");
      newJS.id = "js";
      newJS.src = "testb.js";
      body.appendChild(newJS);
      jsArea.innerHTML="Asynchronous"
     }
     var jsArea = document.getElementById("jsArea");
    </script>

    testa.js
    document.write("This is A");

    testb.js
    setTimeout(function(){jsArea.innerHTML="This is B,now imagine i'm a servlet";},100)

    測(cè)試結(jié)果表明可以在不刷新頁面的情況下更新jsArea中的內(nèi)容,如果我們把testb.js換成一個(gè)servlet會(huì)怎么樣
    那不是可以在serverside直接寫數(shù)據(jù)或function給client用了嗎,完全不需要XHR來中轉(zhuǎn),省去了不少麻煩,而且還可以實(shí)現(xiàn)跨域訪問

    但是有兩點(diǎn)要注意,testb.js用document.write沒有作用,如果不用setTimeout,會(huì)直接讓我的IE7和IE6crush,具體原因不明,有牛人知道請(qǐng)告訴我
    目前在FF2.0.0.4/Opera9.2/IE7/IE6下測(cè)試通過.

    由于找了好久都不知道這種方式的官方名稱,并且很明顯這不Asynchronous JavaScript and XML,這里連XML和XmlHttp的影子都沒有,
    所以為了稱呼方便我暫時(shí)叫它DSSO(DynamicSwitchScriptObject),當(dāng)然這不是我發(fā)明的,Google不知道用了多久了,如果你知道準(zhǔn)確的名字請(qǐng)麻煩告知我

    現(xiàn)在我們比較下AJAX和DSSO的特點(diǎn):
    AJAX DSSO
    跨域訪問 不支持 支持
    異步操作 支持 支持(body.appendChild后不需要等到完成才會(huì)繼續(xù),當(dāng)然完整的異步訪問需要另外的pattern來支持)
    數(shù)據(jù)載體 XML或JSON或TEXT 可以直接由server寫成Javascript
    操作復(fù)雜性 需要解析XML或JSON 可以直接使用

    目前暫時(shí)想到這么多可以比的,期待大家的討論

    評(píng)論

    # re: AJAX還有另一條路,不用XHR也可以無刷新從serverside拿數(shù)據(jù)更新頁面,還可以克服XHR不能跨域問題[未登錄]  回復(fù)  更多評(píng)論   

    2008-12-29 16:27 by Jelly
    你測(cè)試過它可以跨域么????????

    # re: AJAX還有另一條路,不用XHR也可以無刷新從serverside拿數(shù)據(jù)更新頁面,還可以克服XHR不能跨域問題[未登錄]  回復(fù)  更多評(píng)論   

    2008-12-29 20:00 by Kerwin Weng
    當(dāng)然試過,貌似Gmail和Google Reader就用這樣的方式在做嘛

    # re: AJAX還有另一條路,不用XHR也可以無刷新從serverside拿數(shù)據(jù)更新頁面,還可以克服XHR不能跨域問題[未登錄]  回復(fù)  更多評(píng)論   

    2008-12-30 10:14 by Jelly
    跨域這個(gè)問題的關(guān)鍵并不在于ajax或xhr,而是瀏覽器對(duì)于javascript的安全考慮不允許跨域,不允許不同域名之間js互相調(diào)用。
    我用firebug看到的結(jié)果是,gmail依然用的xhr去定時(shí)更新數(shù)據(jù),至于跨子域調(diào)用js是有辦法解決的。
    你給的例子和跨域沒有任何關(guān)系,我很難相信你試過用在一個(gè)域名下去get或post另一個(gè)域名的請(qǐng)求。

    # re: AJAX還有另一條路,不用XHR也可以無刷新從serverside拿數(shù)據(jù)更新頁面,還可以克服XHR不能跨域問題[未登錄]  回復(fù)  更多評(píng)論   

    2008-12-30 12:05 by Kerwin Weng
    上面的例子是把test.html放在www.aaa.com下,把創(chuàng)建script的src改成一個(gè)http://www.bbb.com/testb.js,也就是說動(dòng)態(tài)引入另一個(gè)域的script,難道我們不可以在一個(gè)域的頁面引用另一個(gè)域的js?難道引入的JS無法訪問引入它的頁面的對(duì)象?
    而且我又重做了一次測(cè)試,結(jié)果還是證明可以跨域,而且Google Maps API也是這樣在操作,所以我只能說你不信就不信吧.

    沒有post或get,具體怎么提交數(shù)據(jù)已經(jīng)說得很清楚了

    # re: AJAX還有另一條路,不用XHR也可以無刷新從serverside拿數(shù)據(jù)更新頁面,還可以克服XHR不能跨域問題  回復(fù)  更多評(píng)論   

    2008-12-31 05:27 by Ajaxer
    這種方法可以跨域的,原理是通過動(dòng)態(tài)修改script 標(biāo)簽的src屬性實(shí)現(xiàn)的,這個(gè)屬性是沒有跨域問題的。MapABC API的一個(gè)工具類就是這么做的。不能使用document.write的原因是用write輸出的代碼會(huì)與page加載的代碼沖突,而且不同的瀏覽器對(duì)write的代碼和頁面加載的代碼執(zhí)行的順序是不一樣的,所以盡量使用DOM的操作方式。

    # re: AJAX還有另一條路,不用XHR也可以無刷新從serverside拿數(shù)據(jù)更新頁面,還可以克服XHR不能跨域問題[未登錄]  回復(fù)  更多評(píng)論   

    2008-12-31 12:21 by Kerwin Weng
    的確document.write不是一種好的方式,測(cè)試原理的時(shí)候我是圖簡(jiǎn)單省事,但是其他任何環(huán)境下都推薦使用Dom

    # re: AJAX還有另一條路,不用XHR也可以無刷新從serverside拿數(shù)據(jù)更新頁面,還可以克服XHR不能跨域問題  回復(fù)  更多評(píng)論   

    2013-07-12 21:22 by hypol
    你這不就類似jQuery的jsonp么。。
    主站蜘蛛池模板: 黑人粗长大战亚洲女2021国产精品成人免费视频 | 四虎国产精品免费永久在线| 在线观看亚洲免费视频| 亚洲中文字幕AV在天堂| 亚洲一级毛片免费在线观看| 麻豆亚洲AV永久无码精品久久| 日本三级在线观看免费| 亚洲中文字幕无码中文字在线| 成年女人A毛片免费视频| 国产gv天堂亚洲国产gv刚刚碰| 黄 色一级 成 人网站免费| 国产亚洲美女精品久久久| 一区二区免费国产在线观看| 啊v在线免费观看| 暖暖免费中文在线日本| 最新精品亚洲成a人在线观看| 国产免费久久精品99久久| 亚洲综合色婷婷七月丁香| 免费看搞黄视频网站| 亚洲欧洲日韩国产综合在线二区| 日韩中文字幕免费视频| 亚洲成a人不卡在线观看| 歪歪漫画在线观看官网免费阅读| 中文无码亚洲精品字幕| 国产成人aaa在线视频免费观看| 美女无遮挡免费视频网站| 亚洲一区精品伊人久久伊人| 国产免费爽爽视频在线观看| 亚洲国产美女精品久久| 四虎成人精品一区二区免费网站| 另类小说亚洲色图| 久久精品国产亚洲一区二区三区| 国产做国产爱免费视频| 亚洲激情校园春色| 日本免费一二区在线电影| 99re6在线精品免费观看| 亚洲天天做日日做天天欢毛片| 精品久久久久国产免费| 一区二区三区精品高清视频免费在线播放 | 大地资源网高清在线观看免费| 成人伊人亚洲人综合网站222|