Yahoo奇摩知識+ 將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+ 網站將會轉為唯讀模式。其他 Yahoo奇摩產品與服務或您的 Yahoo奇摩帳號都不會受影響。如需關於 Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

志國
Lv 7
志國 發問時間: 電腦與網際網路程式設計 · 1 0 年前

[ Ajax ] 這是 Mozilla 的 Bug 嗎?

我知道這題可能沒有人回答.. 算了, 習慣了, 沒人答就路過的大大隨便答吧~ >_<

我正在開發 Ajax 的 JavaScript 程式, 測試時, 發現重大的問題~

IE 7.0 同時建立兩個新的 XMLHttpRequest 物件, 並且下載檔案, 都能順利取回.

而同樣的程式, Mozilla FireFox 2.0 建立兩個新的 XMLHttpRequest 物件, 同一瞬間, 新的卻把舊的給取代掉了, 也就是說一次只能下載一個檔案, 這樣根本是嚴重的問題, 變成一個要等一個, Queue 在那裡了 >_< 拖垮整體運作效能... 未免也太遜了吧~

不知道有沒有哪位大大寫過這方面程式, 麻煩幫我測一下看看, 是不是會遇到跟我一樣的情形.. 不知有無辦法克服?... >_<

我確認的項目如下:

1. 確實建立了兩個 "新的" 物件, 此部份測試ok

2. 我是用 onreadystatechange 事件, 同時進行.

3. 我利用 FireFox 的錯誤主控台, 任何錯誤訊息均能確認清楚, 也打開 IE 的完整錯誤訊息, 因此兩方比較, 並利用 alert() 來雙確認, 避免誤判.

4. 測試的兩個檔案均為不到 1kb 的 XML 檔案, 這也是實際要用到的資料大小, 就是這麼小的檔案所以更是在一秒鐘之內就兩個都取回了.

~感謝~

註: 詳細版本編號

IE 7.0.5730.11 英文版

Mozilla FireFox 2.0.0.1 繁體中文版

已更新項目:

感謝--流浪玩家--大大熱心寫 code 協助測試^_^

2 個已更新項目:

感謝--蚯蚓--大大也來參與^_^ 事情是醬的,下一個會把前一個給取代掉,所以您提的方法也一樣結果.

2 個解答

評分
  • Chiu
    Lv 4
    1 0 年前
    最佳解答

    不是兩個 request 嗎?

    改成這樣不就好了?

    window.onload=function(){

    req=(window.ActiveXObject)?new ActiveXObject("MSXML2.XMLHTTP"):new XMLHttpRequest();

    req.open("GET","test_1.txt");

    req.onreadystatechange=function(){

    if(req.readyState==4){

    document.getElementById('ajax_1').innerHTML=req.responseText;

    }

    }

    req.send(null);

    //

    req2=(window.ActiveXObject)?new ActiveXObject("MSXML2.XMLHTTP"):new XMLHttpRequest();

    req2.open("GET","test_2.txt");

    req2.onreadystatechange=function(){

    if(req2.readyState==4){

    document.getElementById('ajax_2').innerHTML=req2.responseText;

    }

    }

    req2.send(null);

    }

    2006-12-28 23:43:41 補充:

    改成兩個 request, 結果如預期:

    http://211.20.181.250/~happyman/ajex.html

    IE6, firefox 1.5, 2.0 都是正確的耶!

    有沒有 code 跟實際應用?

    google maps 拼地圖感覺應該不會很慢吧?

    參考資料: 使用經驗
  • 1 0 年前

    這個可能是瀏覽器的標準問題,

    以下列的程式為例:

    <script type="text/javascript">

    var req=new Object();

    window.onload=function(){

    req=(window.ActiveXObject)?new ActiveXObject("MSXML2.XMLHTTP"):new XMLHttpRequest();

    req.open("GET","test_1.txt");

    req.onreadystatechange=function(){

    if(req.readyState==4){

    document.getElementById('ajax_1').innerHTML=req.responseText;

    }

    }

    req.send(null);

    req=(window.ActiveXObject)?new ActiveXObject("MSXML2.XMLHTTP"):new XMLHttpRequest();

    req.open("GET","test_2.txt");

    req.onreadystatechange=function(){

    if(req.readyState==4){

    document.getElementById('ajax_2').innerHTML=req.responseText;

    }

    }

    req.send(null);

    }

    </script>

    </head>

    <body>

    <div id="ajax_1">

    </div>

    <div id="ajax_2">

    </div>

    test_1.txt的內容:123

    test_2.txt的內容:456

    ie呈現:

    123

    456

    FireFox呈現:

    456

    Opera呈現:

    456

    456

    可能要請您將這個問題回報給FireFox,

    也許FireFox官方會有很好的建議。

    2006-12-28 09:23:37 補充:

    因為可以設定兩個變數,

    var req,req_2;

    這樣子就可以,

    不過這應該也不是您所想要的結果,

    您的作法就如同我所說的不同的瀏覽器會有不同結果,

    可以試著將兩個request傳回的結果合為一個,

    也就是將test_1.txt與test_2.txt合併。

    參考資料: 自己, 自己
還有問題?馬上發問,尋求解答。