【发布时间】:2013-05-03 15:29:10
【问题描述】:
在提交表单时,我有一个 jquery ajax 函数,用于查询从文件上传的数据量,可用于制作进度条。这是我的 js 文件:
var submitted = '';
var counter = 0;
$('#webfileuploadform').submit(function(){
if(submitted == 'submitted') return false; // prevents multiple submits
var freq = 1000; // freqency of update in ms
var progress_url = '/upload_progress/' + $('#id_progress_id').val(); // ajax view serving progress info
update_progress_bar();
function update_progress_bar(){
$.ajax({
dataType:"json",
url: progress_url,
success: function(data){
counter ++
console.log('hit success ' + counter);
},
complete: function(jqXHR, status){
if (status == 'success'){
console.log('hit complete', status == success')
} else {
console.lot('hit complete', status == something else')
}
}
});
setTimeout(function(){update_progress_bar()}, freq);
}
submitted = 'submitted'; // marks form as submitted
});
因此,用户将使用表单选择文件,然后单击提交。这一切都发生得很好。表单提交,文件上传,当我在单独的选项卡中打开我的 ajax 视图并不断刷新它时,进度显示得很好。我不明白为什么 update_progress_bar 函数会运行一次,直到我停止页面。我将上传一个文件,但在我单击浏览器上的“x”之前,我不会在控制台中获得任何“命中成功”。在我点击停止后,控制台吐出“命中成功”加上计数器。但我不应该停下来做这件事。文件上传时我需要它来工作。
任何想法我的问题是什么?
**
编辑
**
不确定它是否有所作为,但我在 django 开发服务器上完成所有这些工作。我认为在同一个会话中使用两个 XMLHTTPRequest 应该没有问题。
【问题讨论】:
-
是
ar freq=1000吗?或var freq=1000 -
同一会话中有两个 XMLHTTPRequest。
-
你真的应该使用 setTimeout 而不是 setInterval。返回 Ajax 调用时重新触发超时。警报也是一个坏主意,请使用控制台。而且您正在使用获取请求,因此希望您设置了正确的标头,因此不会缓存 ajax 调用。什么是上传文件?
-
console.log($.ajaxSettings.async);带给你什么? -
(O.T.) 将
$variablename用于对象... 99% 的程序员可能认为您存储的是对象而不是存储标志 :)
标签: javascript jquery ajax