2012-04-30 122 views
0

我使用$.get()函数来处理大量文件,我需要从其回调函数中找出我要调用的文件名。有没有办法做到这一点?

while (allFilesToImport.length > 0) { 
    var fileToOperate = allFilesToImport.shift(); 
    var jqxhr = $.get(path + '/' + fileToOperate, 
     function(data, textStatus, jqXHR){ // here I need the fileToOperate variable!}); 
+1

文件名是什么?你总是可以访问XMLHTTPRequest对象:http://api.jquery.com/jQuery.get/#jqxhr-object –

+0

你对“filename”有什么意思?需要更多信息 –

+0

添加了一些详细信息... – headkit

回答

2

您可以访问fileToOperatemypathToTheFile自己的函数中 - 这就是为什么闭包是真棒的原因之一。

下面是在的情况下一个循环的例子就是你拥有的一切:

var filenames = ['a', 'b', 'c']; 
for(var i = 0; i < filenames.length; i++) { 
    (function(filename) { 
     $.get('whatever/'+filename, function(data) { 
      // here you can use filename and it will point to the correct value 
     }); 
    })(filenames[i]); 
} 

你也可以使用$.each()遍历数组了:

$.each(filenames, function(i, filename) { 
    $.get('whatever/'+filename, function(data) { 
     // here you can use filename and it will point to the correct value 
    }); 
}); 
+0

$ .get()是异步的,我需要处理大量文件。这将无法正常工作... :-( – headkit

+1

)如果你正确地使用闭包,它会工作如果你有一个循环,你可能需要使用一个自动执行的函数,它将你的变量作为参数来避免相同的锁定变量在封闭每个文件。请张贴一些更多的实际代码,所以我们可以帮助你! – ThiefMaster

+0

done。added more code ... – headkit

1

有一个简单的解决了这一点。 JavaScript的支持关闭,这意味着你可以使用变量从功能范围之外传递给$不用彷徨作为回调(和其他地方一样,你传递一个函数值)的函数值内

var mypathToTheFile = path + '/' + fileToOperate; 
var jqxhr = $.get(mypathToTheFile, 
        function(data, textStatus){ 
         // here you simply use the mypathToTheFile variable! 
       }); 

有一些古怪到注意你何时使用闭包。函数范围之外的任何变量都会反映在函数内部。 E.g

var functionValues = [],i,j; 
for(i=0;i<10;i+=1){ 
    j = new String(i); 
    functionValues[i] = function(){alert(j);}; 
} 

for(i=0;i<10;i+=1){ 
    functionValues[i](); //this will alert 9 every time 
} 

会提醒9 10倍,而不是如你所料0,1,2,3,4,5,6,7,8,9

+0

thats because我无法使用这个解决方案 - 但thnx! – headkit

+0

@headkit奇怪,因为你接受的答案是使用闭包,所以你确实使用这个解决方案:)。这就是为什么你应该发布实际代码的重要原因。如果原始文件包含一个循环,那么很明显,您的问题会落入上述的一系列奇怪事件中,但很高兴您找到了解决方案 –

+0

抱歉。投票给你。谢谢! – headkit

1

只需使用回调函数内部的变量。它将从外部范围中获取变量的值。

var mypathToTheFile = path + '/' + fileToOperate; 
var jqxhr = $.get(mypathToTheFile, function(data, textStatus){ 
// here I need the mypathToTheFile variable! 
    do_something(mypathToTheFile); 
}); 
+0

$ .get()是异步的,我需要处理大量文件。这将无法正常工作... :-( – headkit

+0

然后发布实际代码。 –

+0

done。added more code ... – headkit