首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Jquery/AJAX在php中处理长任务时输出数据

Jquery/AJAX在php中处理长任务时输出数据
EN

Stack Overflow用户
提问于 2018-08-16 06:00:57
回答 1查看 159关注 0票数 0

下午好。

我有以下代码,它在提交时将数据发送到一个PHP文件,该文件查询多个网络节点的健康状态。问题是这些任务需要大约40秒才能完成,并且在这段时间内没有输出。我尝试使用ob_flush和flush。没有效果,尽管我在代码的php部分有。我仍然看到正在加载的消息,并在准备好后获得完整的打印输出。然而,flushob_flush通常在我的服务器上工作(作为独立脚本测试),所以这不是问题所在。

根据我的理解,这就是jQuery/ajax调用,它在输出打印输出之前等待代码完全执行。我浏览了论坛,但找不到任何适用的解决方案,因为当我使用"POST“时,大多数都与"GET”请求有关。

有人能给我指出正确的方向吗?有没有办法在PHP仍在处理请求时接收打印输出?

JS代码

代码语言:javascript
复制
$(document).ready(function(){
    $('#userForm3g').on('submit', function(e){
        e.preventDefault();
        e.stopImmediatePropagation();

        $('#response').html("<b>Loading data...</b>");

        $.ajax({
                type: 'POST',
                url: 'myphpfile.php',
                data: $(this).serialize()
            })
            .done(function(data){ 
                $('#response').html(data);
            })
            .fail(function() { 
                alert( "Posting failed." );
            });

        return false;
    });
});

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-08-16 06:40:20

你提到的方法的问题是,它可能有多种失败的方式:你可能忘记清除php输出缓冲区,或者设置可能由于某种原因被严格控制,可能有一个代理或负载均衡器等待请求完成,或者也可能是web浏览器(chrome用于呈现部分内容,但他们停止了这一点)。

然而,答案很少:

  • 你可以使用部分响应(这基本上是http上的流媒体)。有一个专门的库可以做到这一点,我以前用过,但我忘记了它的名字。
  • 你可以使用任何长轮询的方法,包括comet或sockets,但你需要一个兼容的服务器(node.js或reactphp)
  • 你可以使用第三方服务,如PusherOneSignal (他们也使用以前的方法,但它更集成和可靠)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51867043

复制
相关文章

相似问题

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