同时对PHP进行两次AJAX调用
我有一个表单,它向我的一个控制器提交一个AJAX请求,该控制器使用PHP的curl上传一个文件。我想向用户显示(PHP)上传的状态,因此我将PHP上传进度存储在会话变量中。同时,表单的提交还启动了一个同时对PHP进行两次AJAX调用,php,html,ajax,session,Php,Html,Ajax,Session,我有一个表单,它向我的一个控制器提交一个AJAX请求,该控制器使用PHP的curl上传一个文件。我想向用户显示(PHP)上传的状态,因此我将PHP上传进度存储在会话变量中。同时,表单的提交还启动了一个setInterval(),它向检查会话变量的控制器发出不同的AJAX请求。我的问题是,第二个AJAX调用似乎只触发一次(而不是在整个上传过程中),因此它没有逐步更新进度,而是在最后返回100。我做错了什么 这是我的密码: (注意:我使用jQuery表单插件来帮助文件上传。它还添加了一些额外的回调)
setInterval()
,它向检查会话变量的控制器发出不同的AJAX请求。我的问题是,第二个AJAX调用似乎只触发一次(而不是在整个上传过程中),因此它没有逐步更新进度,而是在最后返回100。我做错了什么
这是我的密码:
(注意:我使用jQuery表单插件来帮助文件上传。它还添加了一些额外的回调)
var check_progress=函数(){
$.ajax(
{
url:“/media/upload\u progress”,
成功:功能(数据){
控制台日志(数据);
},
异步:false
}
);
变量选项={
beforeSend:function(){
$(“#MediaSubmitForm”).hide();
$(“#MediaSubmitForm”)。之后(“”);
t=设置间隔(检查进度,500);
},
成功:功能(数据){
$(“.hula hippo”).hide();
$(“#MediaSubmitForm”)。之后(“上传完成!Do您想拥有自己的吗?”;
视窗间隔(t);
控制台日志(数据);
}
};
$(“#MediaSubmitForm”).ajaxForm(选项);
使用setTimeout();
setInterval()
在指定的时间后执行代码,并且setTimeout()
在每次到达指定时间时执行代码
这些问题很好地解释了它们的区别:)
搜索on SO将解决您的问题:)听起来这是一个PHP锁定问题。请参阅此问题答案中的第一条注释:
可能是因为对您可以同时连接的数量有限制。顺便问一下,您将异步标志设置为false有什么原因吗?是您为php或从浏览器引用的连接数量吗?HTTP规范规定浏览器应将与服务器的同时连接限制为2。也可能是错误的根据服务器的配置对其进行限制。我想你是对的。我读了这个问题,并尝试在一些地方添加session_write_close(),但它仍然不起作用。你知道我应该在哪里添加它吗?
<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>