【问题标题】:SSE stays on pending while AJAX is runningSSE 在 AJAX 运行时保持挂起
【发布时间】:2018-09-20 18:43:25
【问题描述】:

在我的项目中,我有一个由 AJAX 调用的长时间运行的进程。持续时间可以是 1 到 15 分钟。

在 AJAX 运行时,我想向用户提供更新。它应该只是简单地显示还有多少行要添加到数据库中。

我发现有几种不同的选择可以实现这一点。轮询、SSE 或 WebSockets。我从来没有使用过 WebSockets,也找不到很好的例子。

我现在正在尝试使用我非常了解的 SSE,它工作正常。但是当 AJAX 开始运行时,与 eventSource 的连接将处于挂起状态。因此,当 AJAX 运行时,没有收到任何更新。

代码:

    <script type="text/javascript">
var es;

function checkProgress(id){
    es = new EventSource('checkProgress.php');   
    es.addEventListener('message', function(e) {
        console.log(e.data);
        }, false);
}
checkProgress(1);   

    $(function() {
        $('.submit').on('click', function() {

                var form = $('form')[0];
                var form_data = new FormData(form);             

                $.ajax({
                    type: 'POST',
                    url: 'submit.php',
                    contentType: false,
                    processData: false,
                    data: form_data,
                    success:function(response) {
                       console.log(response);
                    }
                });

            return false;
        });
    });
</script>

截图:

Network log

现在实际上我仍然没有找到任何关于如何在 AJAX 进程运行时实现 SSE 的参考或示例。所有的参考或例子都给出了让getProgress文件做某事的例子。

【问题讨论】:

    标签: ajax server server-sent-events jss


    【解决方案1】:

    我看到您正在使用 PHP。我最好的猜测是您也在使用内置的 PHP 会话管理。这样做的问题是访问会话是一个独占操作。我猜你的 AJAX 操作已经打开并锁定了会话,阻止你的 SSE 脚本也打开会话。你可以考虑not opening the session or opening it read-only

    【讨论】:

      猜你喜欢
      • 2020-01-07
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      相关资源
      最近更新 更多