尝试提交表单时出现了一个奇怪的错误。
我第一次提交此表单时,浏览器要求我将正在使用的URL添加到“允许的URL列表”中,以便能够自动执行弹出窗口。
当我接受允许从此url执行弹出窗口时,最后自动从表单中执行url目标,但不会发送我的输入值。
一旦url已经在权限列表中,此问题就不会再次出现,但是当url仍未从浏览器注册到权限列表中以执行弹出窗口时,显然我想修复此首次访问权限。
在所有情况下,我都需要像往常一样从表单中获取输入值。
该过程将由ajax,表单和控制器完成。
当我单击按钮操作时,我会通过AJAX将所需的信息发送到控制器以在我的应用程序中设置文件。直到这里一切都OK。之后,我在浏览器的新标签页中提交了表单,处理该表单的控制器使浏览器要求我将URL添加到浏览器的允许的网站中,以便能够执行弹出式窗口< / strong>(在这种情况下是弹出窗口,用于下载我在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;
}