我正在尝试调用showUpload();从两个setTimeouts中。两者都不起作用。它似乎超出了范围,我不确定为什么。我尝试了this.showUpload()
但也没有用。
$(document).ready(function(){
var progress_key = $('#progress_key').val();
// this sets up the progress bar
$('#uploadform').submit(function() {
setTimeout("showUpload()",1500);
$("#progressbar").progressbar({ value:0}).fadeIn();
});
// uses ajax to poll the uploadprogress.php page with the id
// deserializes the json string, and computes the percentage (integer)
// update the jQuery progress bar
// sets a timer for the next poll in 750ms
function showUpload() {
$.get("/myid/videos/uploadprogress/" + progress_key, function(data) {
if (!data)
return;
var response;
eval ("response = " + data);
if (!response)
return;
var percentage = Math.floor(100 * parseInt(response['bytes_uploaded']) / parseInt(response['bytes_total']));
$("#progressbar").progressbar({ value:percentage})
});
setTimeout("showUpload()", 750);
}
});
感谢您的时间。
答案 0 :(得分:2)
您似乎需要在showUpload
个来电中删除setTimeout
中的括号。否则,您将调用showUpload
方法,而不是将其作为参数传递:
setTimeout(showUpload, 750);
答案 1 :(得分:2)
正如@Daniel所说,这应该有效:
setTimeout(showUpload, 750);
请注意,应删除引号(这就是为什么在超时用完之前不会执行的原因)。现在,您正在传递一个字符串,当超时用完时,该字符串为eval
。这个eval
将在不同的范围内发生,这就是您看到所遇到的问题的原因。
相反,将对showUpload
函数的引用传递给setTimeout
将允许您的函数稍后执行。请记住,当它运行时,它将处于不同的范围内,因此您可能会遇到其他范围问题,例如progress_key
。您需要在showUpload周围创建一个闭包来捕获该参数。