在Symfony2中使用AJAX的并发操作

时间:2012-03-18 23:11:05

标签: jquery symfony

我目前正在开发一个Symfony2项目,该项目在某些时候涉及提交表单并对文件系统执行冗长的操作(递归副本)。

目前,用户必须等到文件系统操作完成并在重定向之前处理表单。我尝试使用一些简单的AJAX来增强此功能。我遇到了无法同时执行表单提交和查询其他操作/控制器的麻烦。

Symfony2是否允许并发控制器请求?如果它没有,有没有办法完成实现像基本并发一样的工作?

这是我在代码方面要做的事情的概述:

<form action="{{ path('performSomeAction', { 'id': client.getId(), 'someId':some.someId() }) }}" method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}

<input type="submit" />

这就是我正在尝试同时使用异步XMLHttpRequest提交表单:

<script language="JavaScript" type="text/javascript">        
        function getXmlHttpRequestObject() {
            if (window.XMLHttpRequest) {
                return new XMLHttpRequest(); //Not IE
            } else if (window.ActiveXObject) {
                return new ActiveXObject("Microsoft.XMLHTTP"); //IE
            } else {
                alert("Your browser doesn't support the XmlHttpRequest object. ");
            }
        }

        var receiveRequest = getXmlHttpRequestObject();

        function handleFetchProgress() {
            if (receiveRequest.readyState == 4) {
                var newData = receiveRequest.responseText;
                var oldData = document.getElementById("span_result").innerHTML;
                var toDisplay = oldData +  "<br />" + newData;
                document.getElementById("span_result").innerHTML = toDisplay;
            }
        }

        function fetchProgress() {     
            if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
                receiveReq.open("GET", '{{ path('fetchProgress') }}', true);
                receiveRequest.onreadystatechange = handleFetchProgress;
                receiveRequest.send(null);
            }         
        }

        $(document).ready(function() {
            $('form').submit(function() {
                setInterval("fetchProgress()", 1000);
                return false;
            });
        });

1 个答案:

答案 0 :(得分:4)

这可能是由会话锁定引起的,在此解释:How do I kill a session in Symfony2?

您必须解锁会话写入模式以接受另一个访问它的请求。

我写了一篇关于处理异步请求的博文:http://blog.alterphp.com/2012/08/how-to-deal-with-asynchronous-request.html