【问题标题】:Making two simultaneous AJAX calls to PHP对 PHP 进行两个同时 AJAX 调用
【发布时间】:2013-07-27 07:37:04
【问题描述】:

我有一个表单,它向我的一个控制器提交 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>

【问题讨论】:

  • 这可能是一个问题,因为您可以同时拥有的连接数有限制。顺便说一句,您将异步标志设置为 false 是否有原因?
  • 你引用的连接数是php还是浏览器?
  • HTTP 规范规定浏览器应将同时连接到服务器的连接数限制为 2。根据其配置方式,您的服务器也可能存在限制。

标签: php html ajax session


【解决方案1】:

听起来这是一个 PHP 锁定问题。请参阅此问题答案中的第一条评论:

jQuery: Making simultaneous ajax requests, is it possible?

【讨论】:

  • 我认为你是对的。我阅读了这个问题并尝试在几个地方添加 session_write_close() ,但它仍然不太有效。你知道我应该在哪里添加它吗?
【解决方案2】:

使用setTimeout();setInterval() 在指定时间后执行代码,setTimeout() 每次到达特定时间时执行代码。

这些问题很好地解释了它们的区别:)

在 SO 上搜索 this 将解决您的问题 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多