我有一个表单,它向我的一个控制器提交一个AJAX请求,该控制器使用PHP的curl上传文件。我想向用户显示该(PHP)上传的状态,因此我将PHP上载进度存储在会话变量中。同时,表单的提交也会启动setInterval()
,它向控制器发出不同的 AJAX请求,检查会话变量。我的问题是第二次AJAX调用似乎只触发一次(而不是整个上传过程),因此不是逐步更新进度,而是在结束时返回100。我做错了什么?
这是我的代码:
(注意:我正在使用jQuery表单插件来协助文件上传。它还增加了一些额外的回调)
<script>
var check_progress = function() {
$.ajax(
{
url : '/media/upload_progress',
success : function(data) {
console.log(data);
},
async : false
}
);
var options = {
beforeSend : function() {
$("#MediaSubmitForm").hide();
$("#MediaSubmitForm").after('<img class="hula-hippo" src="/img/hippo-hula.gif" />');
t = setInterval( check_progress, 500 );
},
success : function(data){
$(".hula-hippo").hide();
$("#MediaSubmitForm").after("<h3>Upload complete!</h3><p>Do <strong>you</strong> want to <a href='#'>create a project</a> of your own?</p>");
window.clearInterval(t);
console.log(data);
}
};
$("#MediaSubmitForm").ajaxForm(options);
</script>
答案 0 :(得分:0)
使用setTimeout();
。 setInterval()
在指定的时间后执行代码,setTimeout()
每次到达特定时间时执行代码。
这些问题很好地解释了他们的不同之处:)
在SO上搜索this将解决您的问题:)
答案 1 :(得分:0)
听起来这是一个PHP锁定问题。请参阅此问题答案中的第一条评论: