在jquery的$ .get回调函数中使用文件名

时间:2012-04-30 11:09:16

标签: javascript jquery ajax get

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

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

3 个答案:

答案 0 :(得分: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
    });
});

答案 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);
});