Jquery Symfony2中使用AJAX的并发操作

Jquery Symfony2中使用AJAX的并发操作,jquery,symfony,Jquery,Symfony,我目前正在从事一个Symfony2项目,该项目有时涉及提交表单并在文件系统上执行一个冗长的操作(递归副本) 目前,用户必须等待文件系统操作完成并处理表单后才能重定向。我已经尝试通过使用一些简单的AJAX来增强这个功能。我遇到了无法同时执行表单提交和查询另一个操作/控制器的问题 Symfony2是否允许并发控制器请求?如果没有,有没有办法完成一些类似于基本并发的工作 这是我试图在代码方面做的概述: <form action="{{ path('performSomeAction', { 'i

我目前正在从事一个Symfony2项目,该项目有时涉及提交表单并在文件系统上执行一个冗长的操作(递归副本)

目前,用户必须等待文件系统操作完成并处理表单后才能重定向。我已经尝试通过使用一些简单的AJAX来增强这个功能。我遇到了无法同时执行表单提交和查询另一个操作/控制器的问题

Symfony2是否允许并发控制器请求?如果没有,有没有办法完成一些类似于基本并发的工作

这是我试图在代码方面做的概述:

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

<input type="submit" />

{{form_widget(form)}

这就是我试图使用异步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;
            });
        });

函数getXmlHttpRequestObject(){
if(window.XMLHttpRequest){
返回新的XMLHttpRequest();//不是IE
}else if(window.ActiveXObject){
返回新的ActiveXObject(“Microsoft.XMLHTTP”);//IE
}否则{
警报(“您的浏览器不支持XmlHttpRequest对象。”);
}
}
var receiveRequest=getXmlHttpRequestObject();
函数handleFetchProgress(){
如果(ReceiverRequest.readyState==4){
var newData=receiveRequest.responseText;
var oldData=document.getElementById(“span_结果”).innerHTML;
var toDisplay=oldData+“
”+newData; document.getElementById(“span_结果”).innerHTML=toDisplay; } } 函数fetchProgress(){ 如果(receiveReq.readyState==4 | | receiveReq.readyState==0){ receiveReq.open(“GET”,“{path('fetchProgress')}}}”,true); ReceiverRequest.onreadystatechange=handleFetchProgress; 接收方请求发送(空); } } $(文档).ready(函数(){ $('form')。提交(函数(){ setInterval(“fetchProgress()”,1000); 返回false; }); });

这可能是由会话锁定引起的,下面对此进行解释:

您必须解锁会话写入模式才能允许另一个访问它的请求


我写了一篇关于处理异步请求的博文:

这可能是由会话锁引起的,下面对此进行解释:

您必须解锁会话写入模式才能允许另一个访问它的请求


我写了一篇关于处理异步请求的博文:

Symfony2用于构建web应用程序,我希望它允许并发控制器请求。。。请更准确地描述“不能同时执行表单提交和查询另一个操作/控制器”。一旦在jQuery的.submit上执行AJAX请求(这是一个尝试返回带有一些文本的响应的请求—“receiveReq.open”(“GET”),“{{path('fetchProgress')}”),负责处理表单的控制器({{path('performSomeAction')})不返回任何内容。我确实收到AJAX请求的响应,但表单提交控制器没有响应。因此,我提交表单,页面加载一秒钟,直到收到AJAX请求的响应,负责表单提交的控制器停止。您确定有2个请求吗?检查您的访问日志。谢谢感谢您指出这一点。没有两个请求。它是一个或另一个,或者是表单提交请求(如果我禁用setInterval(“fetchProgress()”),文件系统操作完成并返回视图呈现。如果我不禁用setInterval(),则我会不断收到来自“fetchProgress()的响应)“。这可能与jQuery的.submit处理程序的属性有关吗?@greg0ire如果我将jQuery的.submit处理程序的return设置为true,则表单正在提交,但AJAX请求没有执行。Symfony2用于构建web应用程序,我希望它允许并发控制器请求…描述“无法同时执行表单提交和查询另一个操作/控制器”请更准确地说。一旦在jQuery的.submit上执行AJAX请求(这是一个尝试返回带有一些文本的响应的请求—“receiveReq.open”(“GET”),“{path('fetchProgress')}”),负责处理表单的控制器({{path('performSomeAction')})不返回任何内容。我确实收到AJAX请求的响应,但表单提交控制器没有响应。因此,我提交表单,页面加载一秒钟,直到收到AJAX请求的响应,负责表单提交的控制器停止。您确定有2个请求吗?检查您的访问日志。谢谢感谢您指出这一点。没有两个请求。它是一个或另一个,或者是表单提交请求(如果我禁用setInterval(“fetchProgress()”),文件系统操作完成并返回视图呈现。如果我不禁用setInterval(),那么我会不断收到来自“fetchProgress()”的响应。可能是jQuery的.submit处理程序的属性有问题吗?@greg0ire如果我将jQuery的.submit处理程序的return设置为true,则表单正在提交,但AJAX请求没有执行。这正是导致问题的原因!这个问题非常过时,我已通过执行session\u write\u close()解决了它,从那以后,我还重新编写了它,以使用@greg0ire指出的jQuery。这正是导致问题的原因!这个问题非常过时,我通过执行session\u write\u close()解决了它,从那以后,我还重新编写了它,以使用@greg0ire指出的jQuery。