2012-07-03 28 views
0

爲了恢復從服務器我使用XMLHttpRequest的數據和我的代碼是這樣的(正常工作)得到PHP服務器的數據

window.onload = function getArtists() { 
    xmlhttpLoad=new XMLHttpRequest();   
    xmlhttpLoad.onreadystatechange=function() { 
     if (xmlhttpLoad.readyState==4 && xmlhttpLoad.status==200) { 
      // put data in an invisible HTML elem   
     } 
    } 
} 

現在我想用一個特定的庫,但它需要該數據在文檔document.onload被觸發之前加載。我怎樣才能做到這一點?我可以使用上面的代碼,但阻止HTML解析,直到數據加載?我的意思是這樣

<head> 
    <script> 
     // block parsing until data are loaded 
     // put data from server in a variable 
    </script> 
    <script src="newLib.js"></script> 
<head> 
+0

你能剛隱藏所有html('display:none')調用ajax然後在成功請求後再次顯示它們? –

+0

問題是,當window.onload事件被觸發時,圖書館做了一些與這些數據的東西,所以這不應該工作 – Naigel

+0

如果沒有這個約束,它不會工作,聽起來像一個瘋狂的圖書館,文檔沒有告訴你如何爲了達成這個。什麼是圖書館? – Brad

回答

1

如果您不使用load事件,但只是直接運行代碼,它將在解析腳本塊時立即啓動。

爲了解析下一個塊,等待AJAX​​響應,你必須發出一個同步請求。你這樣做,通過在open調用的第三個參數(異步)提供false

<head> 
    <script type="text/javascript"> 

    xmlhttpLoad=new XMLHttpRequest(); 
    xmlhttpLoad.onreadystatechange=function() { 
    if (xmlhttpLoad.readyState==4 && xmlhttpLoad.status==200) { 
     // put data in an invisible HTML elem   
    } 
    } 
    xmlhttpLoad.open("get", "somepage", false); 

    </script> 
    <script type="text/javascript" src="newLib.js"></script> 
<head> 

}

+0

謝謝你,這很簡單... – Naigel

+0

@LorenzoC我必須說出我對你的回答。 – rcdmk

2

你可以嘗試設置你的AJAX調用是async = false,所以直到它完成,將停止在頁面執行。

+0

謝謝你,這很簡單... – Naigel

1

你可以加載庫時的數據準備就緒:

xmlhttpLoad=new XMLHttpRequest(); 
xmlhttpLoad.onreadystatechange=function() { 
    if (xmlhttpLoad.readyState==4 && xmlhttpLoad.status==200) { 
     // put data in an invisible HTML elem 
     var script = document.createElement("script"); 
     script.src = "newLib.js"; 
     document.getElementsByTagName("head")[0].appendChild(script); 
    } 
} 
xmlhttpLoad.open("get", "somepage", false); 
+0

我會嘗試,但在這種方式下,當onload事件被觸發時,庫不會被加載... – Naigel

+0

我認爲這只是依賴於數據 – Esailija

+0

在這種情況下,您可以爲要添加的腳本設置onload事件:腳本.onload = function(){//代碼在這裏,當庫已經加載}' – rcdmk

相關問題