【问题标题】:Interactive web app installation in PHPPHP 中的交互式 Web 应用程序安装
【发布时间】:2012-05-26 19:13:29
【问题描述】:

每个请求是否可以多次向浏览器发送数据?例如,我的 CMS 将安装一些模块,我想将信息发送到浏览器(下载模块、解压模块、安装模块……)并更新一些 div 或其他东西以获得更好的 UI 感觉。 也许使用闪光灯?

【问题讨论】:

  • 我认为你可以使用 PHP 的 output buffering 来做到这一点,所以看看吧。
  • 输出缓冲不是那么容易控制,即使您决定刷新,Apache 设置 AFAIK 也可以覆盖您尝试对发送到浏览器的数据进行分段并为您缓冲。
  • 米哈伊:是的:/。其他方式如何实现这件事?我想我在某些网络上看到了这种行为。

标签: php user-interface content-management-system web


【解决方案1】:

我在我的网络应用程序中做了类似的事情。 getstatus.php 是一个文件,它返回诸如 downloading module...unpacking module... 之类的内容,由运行所有这些内容的 php 脚本更新,run.php 在这里。

我在另一个页面 load.php 上使用以下 javascript 代码(使用 jQuery)来显示进度:

<script type="text/javascript">
    var flag = false;

    $(function() {
        startProcess();
        getStatus();
    });  

    function startProcess() {
        $.get('run.php', function() {
            flag = true;
            window.location = 'example.com/finish.html'; // redirect when finished
        });
    }

    function getStatus() {
        $.ajax({
            url: 'getstatus.php',
            success: function(data) {
                // do something with the output of getstatus.php here
            }
        });
        setTimeout("getStatus()",500);
    }
</script>

【讨论】:

  • Niceee,看起来不错,谢谢。您是否进行了一些读/写同步以及您使用什么来存储状态、会话?
  • 不,我不做一些读/写同步,我使用简单的文本文件作为存储
【解决方案2】:

如果您的操作(下载、安装等)阻止了脚本的执行,您可以简单地在每个操作之间放置一条消息。 否则,您可以尝试使用 Web 套接字。

【讨论】:

    【解决方案3】:

    使用 Ajax CORS:

    How can I communicate over TCP sockets from JavaScript?

    http://remysharp.com/2011/04/21/getting-cors-working/

    这是一个模拟实时通信的技巧。

    祝你好运

    【讨论】:

      猜你喜欢
      • 2022-06-21
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多