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!});
4

3 回答 3

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
    });
});
于 2012-04-30T11:23:11.887 回答
1

有一个简单的解决方案。JAvaScript 支持闭包,这意味着您可以在作为回调传递给 $.get 的函数值内使用函数范围之外的变量(以及传递函数值的其他任何地方)

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

使用闭包时需要注意一些奇怪的事情。对函数范围之外的变量所做的任何更改都将反映在函数内部。例如

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

于 2012-04-30T11:23:47.827 回答
1

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

var mypathToTheFile = path + '/' + fileToOperate;
var jqxhr = $.get(mypathToTheFile, function(data, textStatus){ 
// here I need the mypathToTheFile variable!
     do_something(mypathToTheFile);
});
于 2012-04-30T11:24:14.823 回答