如何通过AJAX响应持续向我的客户发送反馈?

时间:2018-09-01 作者:coolpasta

我有一个通过AJAX触发的机制,现在决定通过将每个主调用批处理为AJAX调用来优化它,以避免超时问题(因此脚本不会一次运行我的5个主进程)。这很好,一切都很好-

不幸的是,当每一步都完成时,我想向我的浏览器发送持续的反馈wp_send_json 还调用wp_die, 应该这样做,但这并不可取,因为这意味着在完成第一步后,它将杀死WP并重新启动,因此,我的所有其他消息都不会被发送。在WordPress中,我可以选择什么来构建一个管道式系统,以便不断向浏览器推送更新?

1 个回复
SO网友:Farsad

wp_send_json 只需使用wp_json_encode 作用

因此,您可以使用PHP的内置功能json_encode 您将面临的问题是保持连接的活动性,如果您没有太多的访问者,您可以通过简单地运行while true循环并在准备就绪时回显数据来阻止PHP线程。

while(true) {
    // BTW, You\'ll have to handle your data within the loop or in an outer process
    if($data_available) {
        echo json_encode($data);
        if($last_item) {
            wp_die();
        }
    }
}
你必须确保Keep-Alive 标头和正在调整脚本,以便为此协议功能提供足够的要求。

在WordPress的核心中编写此代码有点困难,将来可能会令人困惑,有一种替代解决方案可以解决此问题。

最好对此类数据使用双工协议(如WebSocket)(随着时间的推移,这些数据正在准备就绪)。在PHP中,有一个非常好的库可以编写反应式代码,名为ReactPHP, 您只需将其与另一个名为React SocketRatchet (我记不清ratchet是否能自己处理所有东西)。

结束

相关推荐

ADMIN-使用FETCH API发出请求时,AJAX返回400错误

我正在开发一个带有ajax处理程序的插件。我首先编写了ajax请求,以设置XHR对象。如下所示:var data = new FormData(); data.append(\'post_title\', \'Hola como\'); data.append(\'action\', \'make_appointment\'); var xhr = new XMLHttpRequest(); xhr.addEventListener(\'readysta