首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP和twig创建一个等待页面

用PHP和twig创建一个等待页面
EN

Stack Overflow用户
提问于 2019-05-19 07:29:33
回答 3查看 392关注 0票数 0

我将数据发布到一个页面,并进行一些检查,这需要5-6秒的时间。我想插入一个等待页面,以改善用户体验。我的代码是这样的:

代码语言:javascript
复制
....functions that take time

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

因为PHP在处理数据之后会在最后调用twig模板,所以我不能使用javascript解决方案。

我尝试先呈现一个等待模板,然后处理数据并将输出存储在一个会话变量中,然后向结果页面发送一个location标头,但我发现PHP在完成整个脚本之前不会回显等待模板,即使我在开始时调用了它。

代码语言:javascript
复制
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

如何实现等待页面?

EN

回答 3

Stack Overflow用户

发布于 2019-05-19 07:57:42

您总是可以临时存储数据,并为用户加载一个虚拟的“加载页面”。当虚拟页面加载时,您发送一个ajax请求来恢复数据并对其进行处理。当ajax调用返回时,您可以执行重定向,或者在流程完成后执行任何您想要执行的操作。

当我说“临时存储数据”时,我指的是数据库或文件等。

票数 0
EN

Stack Overflow用户

发布于 2019-05-27 22:05:53

我最终做的解决方案如下:

通过Ajax调用页面,显示等待页面。

代码语言:javascript
复制
    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页面中,将输出作为数组存储在会话变量中。

代码语言:javascript
复制
....functions that take time
 $_SESSION['result'] = [RESULTS .......] 

在ajax调用成功完成之后,用户被重定向到一个新页面。新页面使用会话变量来调用模板。

代码语言:javascript
复制
echo $twig->render('waiting.html.twig',$_SESSION['result'] );
unset($_SESSION['result']);
票数 0
EN

Stack Overflow用户

发布于 2019-05-27 22:16:35

最简单的解决方案是在第一个页面中添加“等待页面”,但将其隐藏。当用户按下按钮时,浏览器将发送请求,但仍将等待显示旧页面的响应。在这里,您可以使用JS显示它。简而言之,用户按下按钮,你显示模板(它已经在那里,但隐藏),然后浏览器只是等待响应,你的模板在前面。

但最好的方法是按照爱国者的建议使用AJAX。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56203638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档