我有以下功能。在表单提交时使用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和文件名似乎是 空变量 ,尽管在代码达到成功状态之前它们中包含值。
为什么会这样?我是否必须将它们分配为全局变量?
答案 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()
相同