Я получил странную ошибку при попытке отправить форму.
При первой отправке этой формы мой браузер запрашивает добавление URL-адреса, который я использую, в «список разрешенных URL-адресов», чтобы иметь возможность автоматически запускать всплывающее окно.
Когда я принимаю разрешение на запуск всплывающих окон из этого URL-адреса, в конечном итоге автоматически выполняется назначение URL-адреса из формы, но мои входные значения не отправляются.
Когда URL-адрес уже находится в списке разрешений, эта проблема больше не повторяется, но, очевидно, я хотел бы исправить этот первый доступ, когда URL-адрес еще не зарегистрирован в списке разрешений браузера для выполнения всплывающего окна.
Мне нужно во всех случаях получать входные значения из формы, как обычно.
Процесс будет выполнен с помощью ajax, формы и контроллера.
Когда я нажимаю на кнопку, я отправляю необходимую информацию через AJAX на контроллер, чтобы настроить файл в моем приложении. Пока здесь все ок. После этого я отправляю форму в новой вкладке из браузера, и контроллер, который обрабатывает эту форму, заставляет браузер запрашивать у меня добавление URL-адреса к разрешенным веб-сайтам , чтобы иметь возможность выполнять всплывающее окно (в данном случае это всплывающее окно для загрузки предыдущего файла, который я сделал на AJAX).
Я знаю, что не получаю никакого значения, потому что у меня есть часть кода для обработки проверок, и я получаю электронное письмо без значений из входных данных.
JQuery - Ajax:
$('#downloadZip').click(function () {
...
var $data = JSON.parse('{ "tipoT...": "'+$tipoT...+'",etc }');
var request = $.ajax({
url: "{{ path('urldestination') }}",
type: "post",
dataType: "json",
data: $data
});
request.done(function (response){
if (response !== "Error") {
$("#valueIneedFromAjaxInsideFormToExecute ").val(response);
$("#formToExecute").submit();
} else {
alert('{{ 'error'|trans }}');
}
});
request.fail(function (jqXHR, textStatus, errorThrown){
....
});
});
HTML
<form action="{{ path('download_zip') }}" id='formToExecute' target='_blank' method='post'>
<input name='input1' id='valueIneedFromAjaxInsideFormToExecute' value='' style='display: none;'>
</form>
Контроллер
/**
* @Route("xxxx", name="download_zip")
* @Security("is_granted('xx_xxx') or is_granted('xx_xxxx')")
* @param Request $request
* @param TokenStorageInterface $tokenStorage
* @param FieldsValidation $fieldsValidation
* @return \Symfony\Component\HttpFoundation\RedirectResponse
*/
public function downloadZipAction(Request $request, TokenStorageInterface $tokenStorage, FieldsValidation $fieldsValidation)
{
$user = $tokenStorage->getToken()->getUser();
$xxx = $user->getxxx();
$xxxUser = $user->getxxxx();
if ($request->get("input1") !== null && $fieldsValidation->validateInput1((int)$request->get("input1"))) {
$input1 = $request->get("input1");
} else {
$errorException = new ErrorException($this->generateUrl('error',
[
'errorThrown' => 'input1 introduced is not passing the validation',
'errorData' => $request->get("input1"),
'errorOrigin' => 'downloadZipAction'
]
));
return $this->redirect($errorException->redirectResponse);
}
$dirPath = '.../var/cache/files/'.$xxx.'-'.$xxxUser;
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private"); // required for certain browsers
header("Pragma: no-cache");
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename='documentos-".$input1.".zip'");
header("Content-length: " . filesize($dirPath . '/documentos-'.$input1.".zip"));
readfile($dirPath.'/documentsZip-'.$input1.".zip");
if (substr($dirPath, strlen($dirPath) - 1, 1) != '/') {
$dirPath .= '/';
}
$files = glob($dirPath . '*', GLOB_MARK);
foreach ($files AS $key => $file) {
unlink($file);
}
rmdir($dirPath);
die;
}