DSSO - AJAX 的另一條路?


DSSO (DynamicSwitchScriptObject) 根據資料所得 …
這種方法,不但可以跨域,而且比起 XHR (XML HTTP Request) 可以省去解析 XML 的步驟
而後還寫這文的人還發現 GoogleMap 的 API 就是用這方法

注 : 以下的代碼為轉載而來的

test.html :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<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>
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 :

1
document.write("This is A");

testb.js :

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

[備注] 相關轉載的其他補充資料 :

測試結果表明可以在不刷新頁面的情況下更新jsArea中的內容,如果我們把testb.js換成一個servlet會怎麼樣
那不是可以在serverside直接寫數據或function給client用了嗎,完全不需要XHR來中轉,省去了不少麻煩,而且還可以實現跨域訪問

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

由於找了好久都不知道這種方式的官方名稱,並且很明顯這不Asynchronous JavaScript and XML,這裡連XML和XmlHttp的影子都沒有
所以為了稱呼方便我暫時叫它DSSO(DynamicSwitchScriptObject),當然這不是我發明的,Google不知道用了多久了,如果你知道準確的名字請麻煩告知我

轉載網址 : http://www.blogjava.net/hunteva/archive/2007/06/13/dsso.html