在jquery.ajax中重用变量

时间:2010-12-30 17:43:24

标签: javascript jquery

我有以下功能。在表单提交时使用setTimeout调用此函数。

function get_progress( fileID, filename) {
$.ajax({
    url: filename,
    type: 'HEAD',
    success: function() {
        $.ajax({
            type: 'POST',
            url: 'read_file.php',
            data: 'filename=' +filename,
            success: function(html) {
                document.getElementById(fileID).innerHTML = html + ' <img src="images/loading.gif" />'
                setInterval("get_progress(fileID,filename)",400);
            }
        });
    }
});}

一旦成功触发setInterval,我就会遇到错误。文件ID和文件名似乎是 空变量 ,尽管在​​代码达到成功状态之前它们中包含值。

为什么会这样?我是否必须将它们分配为全局变量?

2 个答案:

答案 0 :(得分:2)

试试这个:

success: function(html) {
    $('#' + fileid).append('<img src="images/loading.gif" />');
    setInterval(function() {
        get_progress(fileID,filename);
    }, 400);
}

答案 1 :(得分:2)

这不起作用,因为带有字符串的setInterval会评估全局范围内的代码。您需要使用匿名函数来执行此操作,这会创建一个闭包:

setInterval(function() {
    get_progress(fileID,filename);
} ,400);

来自MDC documentation for window.setInterval

  

建议不要使用此语法[一串代码],原因与使用eval()

相同