2010-02-20 13 views
2

我正在使用AHAH(如此處所述http://microformats.org/wiki/rest/ahah)進行兩次調用以在頁面上填充HTML。這些電話在文檔準備就緒之後發生,並且一個接一個地被觸發。結果,每一次,第一個呼叫被最後一次呼叫響應覆蓋。所以我會在頁面上有兩個相同的HTML塊,而不是兩個獨特的代碼段。有時第一個電話甚至不會評估它的回叫,因此仍然是空的。Javascript異步調用互相踩012

任何想法?

回答

2

如果您使用該網頁上的確切的代碼,這並不奇怪,因爲比如有使用是用單全局變量存儲了XMLHttpRequest。因此,它不能同時處理多個請求:第二次調用該函數會覆蓋req,導致被ahahDone讀取爲錯誤的請求。

如果你想允許這一點,你將不得不作出req一個局部變量(由宣稱它varfunction ahah()),並與target傳遞到ahahDone()功能。或者只是做內聯:

function Element_loadHTML(element, url) { 
    var req= null; 
    if (window.XMLHttpRequest) { 
     req= new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
     try { 
      req= new ActiveXObject('MSXML2.XMLHttpRequest'); 
     } catch() {} 
    } 
    if (!req) { 
     element.innerHTML= 'Browser does not support XMLHttpRequest'; 
     return; 
    } 
    element.innerHTML= 'Loading...'; 

    req.onreadystatechange= function() { 
     if (req.readyState===4) 
      element.innerHTML= req.status===200? req.responseText : 'Error '+req.status; 
    }; 
    req.open('GET', url); 
    req.send(null); 
} 

Element_loadHTML(document.getElementById('appdata'), 'appdata.part.html'); 
Element_loadHTML(document.getElementById('foo'), 'bar.part.html'); 

與瀏覽器嗅探並試圖執行腳本標籤的東西是絕望和破碎;不要使用它。將<script>元素內容加載到頁面中是不好的做法。

+0

PREFECT,我不知道爲什麼我以前沒有看到。謝謝!另外,我沒有使用腳本標籤執行部分。這真的只是一個壞主意。 – Matt 2010-02-20 19:57:45