2013-05-10 52 views
3

我想從服務器獲取一些數據並將其寫入全局數組中的JavaScript。然後在文檔準備好我想用這個數組來創建一些新的元素(選項)。我應該有這個數據的全局數組,因爲在第一次加載客戶端可以修改用戶界面使用這個數據。文檔準備好之前從服務器獲取AJAX數據(jQuery)

$(document).ready(function() { 
    UseAjaxQueryForFillGlobalArray(); 
    MakingInterfaceUsingGlobalArray();  
}); 

但我奇怪的行爲,當我調試頁面,我可以看到,方法MakingInterfaceUsingGlobalArray第一份工作,就在我把通過AJAX獲取數據與方法UseAjaxQueryForFillGlobalArray,我沒有新的界面(html選項)加載數據。

如果我這樣做:

UseAjaxQueryForFillGlobalArray(); 
$(document).ready(function() {  
    MakingInterfaceUsingGlobalArray();  
}); 

然後在Firefox中工作正常,但在其他網絡瀏覽器在第一次加載不正確的(例如去這個頁面的鏈接)。但如果我通過F5刷新,我有正確的用戶界面,通過AJAX加載到全球JS陣列。

如何解決?也許我用完全不正確的方式?

後添加評論

這是我的AJAX功能:

function UseAjaxQueryForFillGlobalArray(){ 
    var curUserId = '<%= Master.CurrentUserDetails.Id %>'; 
    var curLocale = '<%= Master.CurrentLocale %>'; 
    $.ajax({ 
     type: "POST", 
     url: "/segment.aspx/GetArrayForCF", 
     data: '{"userId":"' + curUserId + '","curLocale":"' + curLocale + '"}', 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      //here is I doing parse my string from server and fill arrays.  
     } 
    }); 
} 
+0

你忘了實際添加鏈接到你的例子。 – 2013-05-10 12:08:09

+0

向我們展示您的jQuery ajax代碼。有一個屬性('async')可能是你需要的。 – Codesleuth 2013-05-10 12:08:55

+0

在旁註上:對於初始頁面渲染,我建議您在單個請求中傳輸所有需要的數據,而不是加載基本「空白」頁面,然後通過ajax將數據加載到該頁面中。 – 2013-05-10 12:10:56

回答

5

我覺得現在的問題是,你不知道什麼時候第一個函數返回時,因爲it'a異步。所以,你應該在回調使用數組只

function UseAjaxQueryForFillGlobalArray() { 
    // make the call 
    $.post(url, data, function() { 
     // let's be sure that the dom is ready 
     $(document).ready(function() {  
      // use the array 
      MakingInterfaceUsingGlobalArray();  
     } 
    } 
}();// invoke the function 
+0

謝謝!但不是$ .post我使用$ .ajax,因爲我有500服務器錯誤。 – Smit 2013-05-10 14:09:30

2

這就像復興這篇文章從死裏復活,但是今天我有同樣的問題,jQuery的版本大於1.6有這個能力:

https://api.jquery.com/jquery.holdready/

而且我用這樣的:

$.holdReady(true); 
var remoteJSONContent = null; 
$.getJSON("http://www.example.com/remote.json", function(data) { 
    remoteJSONContent = data; 
    $.holdReady(false); 
}); 

$(document).ready(function(){ 
    console.log(remoteJSONContent); 
}); 

不使用holdReady,我是越來越空,之後,我得到的內容。

對於仍在尋找答案的人。