Не получить значения из входных данных в форме отправки без разрешения всплывающего браузера - PullRequest
0 голосов
/ 27 августа 2018

Я получил странную ошибку при попытке отправить форму.

При первой отправке этой формы мой браузер запрашивает добавление URL-адреса, который я использую, в «список разрешенных URL-адресов», чтобы иметь возможность автоматически запускать всплывающее окно.

Когда я принимаю разрешение на запуск всплывающих окон из этого URL-адреса, в конечном итоге автоматически выполняется назначение URL-адреса из формы, но мои входные значения не отправляются.

Когда URL-адрес уже находится в списке разрешений, эта проблема больше не повторяется, но, очевидно, я хотел бы исправить этот первый доступ, когда URL-адрес еще не зарегистрирован в списке разрешений браузера для выполнения всплывающего окна.

Мне нужно во всех случаях получать входные значения из формы, как обычно.

Процесс будет выполнен с помощью ajax, формы и контроллера.

Когда я нажимаю на кнопку, я отправляю необходимую информацию через AJAX на контроллер, чтобы настроить файл в моем приложении. Пока здесь все ок. После этого я отправляю форму в новой вкладке из браузера, и контроллер, который обрабатывает эту форму, заставляет браузер запрашивать у меня добавление URL-адреса к разрешенным веб-сайтам , чтобы иметь возможность выполнять всплывающее окно (в данном случае это всплывающее окно для загрузки предыдущего файла, который я сделал на 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;
}
...