我在我的脚本中包含了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
,但它似乎没有识别出这个功能。我做错了什么?
答案 0 :(得分:3)
getProgress()
定义在document.ready()
的回调范围内。如果将字符串参数传递给setTimeout()
,则会在全局范围内对其进行评估。因此,从那里看不到你的方法。
您可以更改代码,使用这样的匿名函数:
setTimeout( function() {
getProgress( uid);
}
, 100);
答案 1 :(得分: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;
答案 2 :(得分:1)
如果你使用像set的setTimeout函数
setTimeout('getProgress("' + uid + '")',500)
,
您必须将函数getProgress
放在全局范围内,
如果你使用像setTimeout( getProgress(uid),500)
这样的setTimeout函数,
你可以在jQuery ready函数中定义函数getProgress
答案 3 :(得分:0)
请使用:
setTimeout(function() { getProgress( uid ); }, 500 )
这应该可以正常工作。
答案 4 :(得分:-1)
function getProgress(uid)
在$(document).ready()
内定义,因此它位于不在全局范围内的私有范围内。所以要使用它,只需将其移动到全局。