我目前正在開發一個Symfony2項目,該項目涉及提交表單並對文件系統執行冗長的操作(遞歸副本)。在Symfony2中使用AJAX併發操作
此刻,用戶必須等到文件系統操作完成並在重定向之前進行表單處理。我曾嘗試通過使用一些簡單的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;
});
});
Symfony2的是構建Web應用程序,我希望它允許併發控制的請求......形容「不能夠執行表單提交和查詢另一個動作/控制器「更精確地請。 – greg0ire 2012-03-18 23:16:18
只要AJAX請求在jQuery的.submit上執行(這是一個用一些文本嘗試返回Response的接收器)「receiveReq.open(」GET「,'{{path('fetchProgress')}}'),負責處理表單的控制器({{path('performSomeAction')}})不會返回任何東西,我得到了AJAX請求的響應,但是沒有來自表單提交控制器的響應。一個表單,頁面加載一秒鐘,直到AJAX請求和負責提交表單提交的控制器響應。 – 2012-03-19 11:32:10
您確定您有2個請求嗎?請檢查您的訪問日誌 – greg0ire 2012-03-19 11:54:49