2012-12-25 36 views
2

我想要做的是將數百個文件列表存儲在一個數組中,並使用jquery load()函數一次一個地加載循環內容。jquery load()與數組循環無關

我對jquery和javascript知之甚少,這是我設法寫的,但它不工作。

var files=['index1c.html','index23c.html']; 

for(var index = 0; index < files.length; index++){ 
    var file = files[index]; 

$('#result').load('file .desc'); 
} 

我認爲我有load()給出變量文件中的一些問題,是正確的做法? 這是工作的罰款,如果我直接代替file寫一個文件名,象下面這樣:

$('#result').load('index1c.html .desc'); 
+2

'.load()'將覆蓋的'#result'每當一個新的文件加載內容。這是你打算髮生的事情嗎? – Blender

+0

@Blender:不,我想要追加內容。雅這是什麼加載()做的,我沒有注意到這一點。任何解決方案 – Abhi

+1

「數百個文件」。可憐的小服務器,可憐的小客戶,可憐的小網絡。 –

回答

3

變化:

$('#result').load('file .desc'); 

要:

$('#result').load(file + ' .desc'); 

注意負載的方法移除附加新內容之前元素的內容。你可以創造出獨特的ID,如result1result2 ...和代碼:

for(var index = 0; index < files.length; index++){ 
    var file = files[index]; 
    $('#result' + (index + 1)).load(file + ' .desc'); 
} 

或者你可以使用類和eq方法:

var $results = $('.results') 
for(var index = 0; index < files.length; index++){ 
    var file = files[index]; 
    $results.eq(index).load(file + ' .desc'); 
} 

或者,如果你想追加data可以使用$.get效用函數而不是load方法。

+0

任何方式,我可以防止它被覆蓋,而是把它附加? – Abhi

+0

@Abhi您可以使用'$ .get'實用功能。 – undefined

+0

一個可能的問題Abhi - 你需要保證文件的內容是按照它們被請求的順序列出的嗎?用直接的循環加載,這是不能保證的。 –

2

您正在使用文字字符串'file .desc'

它看起來像你想file + '.desc'

'a b'是字符串a ba + ' b'是變量a的內容附加到字符串' b'的字符串。

2

使用jQuery.ajaxSetup({async:false});

{async:false}將持有其餘代碼的執行嘗試。一旦你得到了Ajax代碼的響應,其餘的代碼將被執行。執行Ajax響應重置爲asyncjQuery.ajaxSetup({async:true});

所以最終代碼後會

var files=['index1c.html','index23c.html']; 

for(var index = 0; index < files.length; index++){ 
    var file = files[index]; 
    jQuery.ajaxSetup({async:false}); 
    $('#result').load('file .desc'); 
    jQuery.ajaxSetup({async:true}) 
}