2012-10-04 50 views
2

我創建的網站具有在多個頁面上使用的信息。我設置它的方式是信息存儲在xml文件中。然後我使用AJAX加載xml文件,並在成功調用附加th的解析方法。將xml加載到div時的AJAX競態條件

似乎有一個競爭條件發生。在xml文件完成分析之前,頁面完成加載。如果我在解析方法中添加警報,那麼它工作正常(這就是爲什麼我認爲它是一個競爭條件)。

function loadXML(link) { 

$('#div1').load(link); 
loadImage(link); 

if (link == "news.html") { 
    $.ajax({ 
     type: "GET", 
     url: "news.xml", 
     dataType: "xml", 
     success: newsParser 
    }); 
    } 
} 

當我在網上搜索時,我已經看到可能使用信號量或超時的事情。這些對我來說都不是很好。

如果在xml之前沒有加載html頁面,那麼沒有div來添加信息。 我也嘗試加載不同的xml文件,當你去到網頁和存儲數據,以便它不會被解析每次你去特定的頁面,但我沒有成功,在搞清楚。

我感謝您提供的任何幫助!

+1

查找到deferreds。它會確保在嘗試運行成功功能之前,這兩個調用都已完成。 http://api.jquery.com/deferred.then/ –

+0

除非你在頁面加載後創建某種更新的實時饋送,否則將數據集成到服務器上可能會更好。這避免了AJAX和事件驅動編程的所有複雜性。它還通過使HTML輸出可緩存來節省計算量。 –

+0

你試圖完成什麼?你期望發生什麼事以及你期望它發生的順序是什麼? –

回答

1

您可以等待DOM加載使用jQuery(這你已經在使用): $().ready() - http://api.jquery.com/ready/

$(document).ready(function(){ 
    $('#div1').load(link); 
    loadImage(link); 
    //etc.. 
} 
+0

目前,我已經把所有這些都包含在了ready函數中。對於沒有準備好的DOM而言,這似乎不是一個問題,而是因爲xml沒有及時爲頁面加載做好準備。 – jaime