В настоящее время я работаю над проектом 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;
});
});