Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有没有可能';回声&x27;来自ajax调用的一系列响应_Php_Jquery_Ajax_Wordpress - Fatal编程技术网

Php 有没有可能';回声&x27;来自ajax调用的一系列响应

Php 有没有可能';回声&x27;来自ajax调用的一系列响应,php,jquery,ajax,wordpress,Php,Jquery,Ajax,Wordpress,在开发网站时,我正在学习和试验jquery/ajax。我有一个更新数据库的页面。我想在用户提交数据时在屏幕上显示一系列响应(我在许多其他网站上看到过这种情况) 例如。。。用户提交表单,页面显示: 收到的输入 正在检查数据库-识别号xy 更新数据库 检索信息 等等 这只是一个例子,但你明白了 我有一个ajax调用,它是在“单击”submit按钮时启动的(getFormData只是为我序列化所有表单数据,工作正常): 我有一个被ajax调用的函数: function upgrade_database

在开发网站时,我正在学习和试验jquery/ajax。我有一个更新数据库的页面。我想在用户提交数据时在屏幕上显示一系列响应(我在许多其他网站上看到过这种情况)

例如。。。用户提交表单,页面显示: 收到的输入 正在检查数据库-识别号xy 更新数据库 检索信息 等等

这只是一个例子,但你明白了

我有一个ajax调用,它是在“单击”submit按钮时启动的(getFormData只是为我序列化所有表单数据,工作正常):

我有一个被ajax调用的函数:

function upgrade_database_function() {
    echo "testing ";

    for($i = 0; $i < 99; $i++) {
        echo "percent complete ".$i."%";
    }

    echo "done ";
    die(); // this is required to return a proper result
}
功能升级\数据库\功能(){
回声“测试”;
对于($i=0;$i<99;$i++){
回显“完成百分比”。$i.“%”;
}
回应“完成”;
die();//这是返回正确结果所必需的
}
我使用的是Wordpress,所有ajax方面的工作都很好,它正确地传递表单数据等等,只是我得到了一个很长的输出,好像缓存了所有的回音,而不是按顺序输出

我已经阅读了jQueryAjax文档,但找不到如何使其按我希望的方式运行。我可以接受它现在的样子,但我认为如果我能让它按照我想要的方式工作,它看起来会更好


这可以这样做吗?或者我需要很多连续的ajax调用才能让它工作吗?

我不懂PHP,但我猜echo只是在写入响应缓冲区。。。所以当所有的回声都完成时,整个响应都会返回,你会得到你所看到的效果。。。你需要一个投票系统或者类似的东西来从服务器上获取最新的状态,并显示它们,我想。。。也许PHP中有一些系统允许这样做,但正如我所说,我不懂PHP

本文提供了一个长轮询示例。

警告:您可能需要在PHP中手动管理会话锁定,以便长时间运行的调用不会锁定轮询ajax调用:请参见此处:

请注意,您可能希望:

  • 创建一个ajax调用,开始执行一些需要一段时间的代码。。。您可以将已生成的消息放入会话变量中,例如某种类型的列表中。您需要如上所述锁定/解锁会话,以防止AJAX轮询调用暂停
  • 您可以创建一个类似本文中所述的轮询方法,该方法可以每隔500毫秒或其他时间检查一次会话,查看是否有更多消息,锁定会话,删除这些消息,并将这些消息返回到客户端并显示它们

警告:再说一遍,我不是一个PHP人,我可能在我的生活中用PHP做过一次(记不清了),但我可能错了,这可能不起作用,从我所看到的来看,尽管这看起来是可以实现的。希望这能让你上路

是的,当所有回波都完成时,响应将返回+是的,这就是我看到的行为。有人知道如何改变行为使其“连续”吗?添加了一些关于PHP中长轮询的信息。希望这足以让你走上正轨……这可能会有所帮助:
function upgrade_database_function() {
    echo "testing ";

    for($i = 0; $i < 99; $i++) {
        echo "percent complete ".$i."%";
    }

    echo "done ";
    die(); // this is required to return a proper result
}