2

我已经在我的脚本中包含了 jquery,现在我正在尝试制作这个上传进度条脚本的 jquery 版本:http ://www.ultramegatech.com/2008/12/creating-upload-progress-bar-php/

这是我的尝试:

$(document).ready(function () {

    function startProgress(uid) {
        console.log("starting progress");
        setTimeout('getProgress("' + uid + '")', 500);
        //some more stuff
    }

    function getProgress(uid) {
        console.log("getting progress");
        $.ajax({
            type: "GET",
            url: 'upload_getprogress.php?uid=' + uid,
            success: function (msg) {
                progress = msg;
                setTimeout('getProgress("' + uid + '")', 100);
                // do some more stuff
            }

        });
    }

    $('#upload').submit(function () {
        startProgress('<?php echo $uid; ?>');
    });
});

但我收到了这个错误:

Uncaught ReferenceError: getProgress is not defined

那个怎么样?

我试图将函数放在 之外document.ready(),但没有帮助。我什至getProgress在里面的开头定义了它,startProgress但它似乎无法识别该功能。我究竟做错了什么?

4

5 回答 5

3

无法仔细检查,但我猜这是因为提交回调的范围。尝试这些方法;

$(document).ready(function(){   
    $('#upload').submit(function(){ window.startProgress('<?php echo $uid; ?>'); });
});

var startProgress = function(uid) {
       console.log("starting progress");
       setTimeout('getProgress("' + uid + '")', 500);
       //some more stuff
};

var getProgress = function(uid) {
    console.log("getting progress");
    $.ajax({  type: "GET", 
        url: 'upload_getprogress.php?uid=' + uid, 
        success: function(msg) {   
            progress = msg;
            setTimeout('getProgress("' + uid + '")', 100);
                    // do some more stuff
        }

    });
};

window.startProgress = startProgress;
window.getProgress = getProgress;
于 2013-07-24T10:00:01.107 回答
3

getProgress()被定义在回调的范围内document.ready()。如果您将字符串参数传递给setTimeout()this,则会在全局范围内进行评估。所以你的方法从那里看不到。

您可以更改代码,以使用如下匿名函数:

 setTimeout( function() {
   getProgress( uid); 
 }
 , 100);
于 2013-07-24T09:56:44.873 回答
1

如果您使用 setTimeout 函数
setTimeout('getProgress("' + uid + '")',500),例如

你必须把函数getProgress放在全局范围内,如果你使用 setTimeout 函数,比如setTimeout( getProgress(uid),500)

您可以在 jQuery 就绪函数中定义函数 getProgress

于 2013-07-24T10:33:04.387 回答
0

请用:

setTimeout(function() { getProgress( uid ); }, 500 )

那应该可以正常工作。

于 2013-07-24T09:56:45.987 回答
-1

function getProgress(uid)在内部定义,$(document).ready()因此它在私有范围内而不是在全局范围内。因此,要使用它,只需将其移至全局即可。

于 2013-07-24T09:57:47.030 回答