未经许可弹出窗口浏览器,无法从提交表单中的输入获取值

时间:2018-08-27 12:57:43

标签: php forms symfony popup submit

尝试提交表单时出现了一个奇怪的错误。

我第一次提交此表单时,浏览器要求我将正在使用的URL添加到“允许的URL列表”中,以便能够自动执行弹出窗口。

当我接受允许从此url执行弹出窗口时,最后自动从表单中执行url目标,但不会发送我的输入值。

一旦url已经在权限列表中,此问题就不会再次出现,但是当url仍未从浏览器注册到权限列表中以执行弹出窗口时,显然我想修复此首次访问权限。

在所有情况下,我都需要像往常一样从表单中获取输入值。

该过程将由ajax,表单和控制器完成。

当我单击按钮操作时,我会通过AJAX将所需的信息发送到控制器以在我的应用程序中设置文件。直到这里一切都OK。之后,我在浏览器的新标签页中提交了表单,处理该表单的控制器使浏览器要求我将URL添加到浏览器的允许的网站中,以便能够执行弹出式窗口< / strong>(在这种情况下是弹出窗口,用于下载我在AJAX上制作的先前文件)。

enter image description here

我知道我没有收到任何值,因为我有一部分代码可以处理验证,并且我收到的电子邮件中没有输入值。

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;
}

0 个答案:

没有答案