Создайте страницу ожидания с PHP и веткой - PullRequest
0 голосов
/ 19 мая 2019

Я публикую данные на странице и провожу некоторые проверки, которые занимают 5-6 секунд. Я хотел бы вставить страницу ожидания, чтобы улучшить пользовательский опыт. Мой код такой:

....functions that take time

echo $twig->render('template.html.twig',[ variables ....]);

Поскольку PHP вызывает шаблон веточки в конце после обработки данных, я не могу использовать решение javascript.

Я попытался сначала отобразить шаблон ожидания, затем обработать данные и сохранить выходные данные в переменной сеанса, а затем отправить заголовок местоположения на страницу результатов, но я обнаружил, что PHP не отображает шаблон ожидания, пока не завершит весь сценарий даже если я позвоню в начале.

echo $twig->render('waiting.html.twig',[ variables ....]);
....functions that take time
store output as session variable.
send location header to another page that renders the template from the session variable

Как мне получить страницу ожидания?

Ответы [ 3 ]

0 голосов
/ 27 мая 2019

Решение, которое я закончил, заключалось в следующем:

Позвоните на страницу Ajax и отобразите страницу ожидания.

    function submit_form(file_method) {
        var spinner = $('#loader');
        spinner.show(); //show waiting div
        var request = $.ajax({
        url: "upload.php",
        cache: false,
        contentType: false,
        processData: false,
        async: true,
        data: form_data,
        type: 'POST',
        success: function (res, status) {
        if (status == 'success') {
            window.location.href = 'results.php';
        } },
        error: function (jqXHR, textStatus,res) {
            spinner.hide();
            alert('Error encountered: '+textStatus+'-'+jqXHR.responseText);

            } })
    };

На странице php сохраните вывод в виде массива в переменной сеанса.

....functions that take time
 $_SESSION['result'] = [RESULTS .......] 

После успешного завершения вызова ajax пользователь перенаправляется на новую страницу. Новая страница использует переменную сеанса для вызова шаблона.

echo $twig->render('waiting.html.twig',$_SESSION['result'] );
unset($_SESSION['result']);
0 голосов
/ 27 мая 2019

Самое простое решение - добавить «страницу ожидания» внутри первой страницы, но скрыть ее. Когда пользователь нажимает кнопку, браузер отправит запрос, но все еще будет ждать ответа, показывающего старую страницу. Здесь вы можете показать это с помощью JS. Вкратце - пользователь нажимает кнопку, вы показываете шаблон (который уже был там, но скрыт), а затем браузер просто ждет ответа с вашим шаблоном впереди.

Но лучше всего было бы использовать AJAX, как предложил Патриот.

0 голосов
/ 19 мая 2019

Вы всегда можете временно сохранить данные и загрузить фиктивную «страницу загрузки» для пользователя. И прямо при загрузке фиктивной страницы вы отправляете ajax-запрос, который восстанавливает ваши данные и обрабатывает их. Когда вызов ajax вернется, вы можете выполнить перенаправление или все, что хотите, когда закончите процесс.

Когда я говорю «временно сохранить данные», я имею в виду базу данных или файл и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...