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