2012-12-25 38 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}) 
}