我使用$.get()函数处理大量文件,我需要在其回调函数中找出我正在调用的文件名。有没有办法做到这一点?
while (allFilesToImport.length > 0) {
var fileToOperate = allFilesToImport.shift();
var jqxhr = $.get(path + '/' + fileToOperate,
function(data, textStatus, jqXHR){ // here I need the fileToOperate variable!});
答案 0 :(得分:2)
您可以在功能中访问fileToOperate
和mypathToTheFile
- 这就是闭包很棒的原因之一。
以下是一个循环示例,以防您拥有的内容:
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
});
});
答案 1 :(得分:1)
有一个简单的解决方案。 JAvaScript支持闭包,这意味着您可以使用函数值外部的变量将函数值传递给$ .get作为回调(以及传递函数值的其他任何位置)
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
}
会提醒10次,而不是你预期的0,1,2,3,4,5,6,7,8,9
答案 2 :(得分:1)
只需在回调函数中使用此变量即可。它将从外部范围获取变量的值。
var mypathToTheFile = path + '/' + fileToOperate;
var jqxhr = $.get(mypathToTheFile, function(data, textStatus){
// here I need the mypathToTheFile variable!
do_something(mypathToTheFile);
});