是否有可能“回应”来自ajax调用的一系列响应

时间:2014-02-08 11:59:11

标签: php jquery ajax wordpress

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

例如......用户提交表单,页面显示: 收到输入 检查数据库 - recond number xy 更新数据库 检索信息 等等

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

我有一个在“点击”提交按钮时启动的ajax调用(getFormData只为我序列化所有表单数据并且工作正常):

var toSend = getFormData($upgrade_db_form);
var formMessageBox = $("#displayResults");

$.ajax({
         url: ajaxurl,
         data: {
             action: "database_action",
             formData : toSend
         },
         type: 'POST',
         dataType: 'TEXT',
         beforeSend: function() {
             //$form.fadeOut('slow');
             formMessageBox.html("starting it up");
         },
         success: function (data) {
            formMessageBox.empty();
            formMessageBox.html(data);
         error: function (xhr) {
            // formMessageBox.html("Oops error!");                     
         }

 });

我有一个由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
}

我正在使用Wordpress,所有ajax方面的工作正常,它正确传递表单数据等,只是我得到一个长输出,好像它缓存所有的回声而不是按顺序输出它们

我已经浏览了jquery ajax文档,无法找到如何让它按照我想要的方式运行。我可以按照它的方式生活,但我认为如果我能按照我想要的方式工作,它看起来会好很多。

这可以通过这种方式完成,还是需要大量顺序的ajax调用才能使其正常工作?

1 个答案:

答案 0 :(得分:2)

我不知道PHP,但我猜测回声只是写入响应缓冲区...所以当所有的回声都完成后,整个响应将被返回,你会得到你的效果看到......您需要使用轮询系统或类似的东西来从服务器获取最新状态并显示它们我会想...也许PHP中有一些系统允许这样做,但是就像我一样说,我不懂PHP。

本文中可以找到长轮询的示例。 http://www.abrandao.com/2013/05/11/php-http-long-poll-server-push/

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

http://konrness.com/php5/how-to-prevent-blocking-php-requests/

请注意,您可能希望:

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

警告:同样,我不是一个PHP用户,我可能在PHP生活中做过一次(不记得确切),但我可能错了,这可能行不通从我所看到的,虽然看起来它是可以实现的。希望这能让你顺利上路!