【问题标题】:ajax call while updating page更新页面时的ajax调用
【发布时间】:2011-12-01 11:19:34
【问题描述】:

我通过 jquery 对一个 php 脚本进行了 ajax 调用,但返回结果需要很长时间,所以我想知道如何在我的脚本上打印结果时显示结果。这里只是我的 php 脚本的示例:

<?php 
// process.php
for($i = 0; $i <= 4; $i++){
echo json_encode(array("name" => $i) );
sleep(2); // this sleeps for 2 seconds
}
?>

现在我用我的 jquery 调用该页面并在页面上有一个带有 id ajaxquery 的表单:

$("#ajaxquery").live( "submit" , function(){
    var formdata = $(this).serialize(); 
    $.ajax
        ({
            type: "POST",
            url: "process.php",
            data: formdata,
            dataType: "json",
            success: function(data)
            {
                $("#success").html(data.name);
            }
        });

    return false; 
}); 

现在这将在几秒钟后在 div#success 中同时输出所有结果,但是我怎样才能实现它打印 echo 语句尽快 process.php 处理它,然后再次等待 2 秒并在 div 成功中添加下一个结果。感谢您的帮助。

【问题讨论】:

    标签: ajax jquery


    【解决方案1】:

    您必须在客户端上设置一个 javascript 计时器并每两秒调用一次 php 脚本来获取新数据。例如,您可以使用 jquery .append 函数附加该数据。

    【讨论】:

    • 谢谢你,先生,但如果我再次使用 javascript 调用 process.php,它不会重新从头开始运行脚本吗?
    • 您必须修改原因脚本以支持该异步模式
    • 再次感谢,我在想如果我将该数据保存到 result.txt 文件然后调用 javascript timer 以检查新内容并从那里更新,当调用 ajax 成功时我停止计时器,这是正确的方法吗?
    • 这种方式的问题在于它只适用于单个客户端,或者您必须为每个连接的客户端维护文本文件。不是在谈论清理那些文件......
    • 谢谢,它实际上只适用于一个客户和一个目的,所以计时器对我有用。问候
    【解决方案2】:

    只有当$.ajax 函数从服务器获得成功响应时才会调用success 函数,并且只有在PHP 脚本完成执行时才会发生这种情况。您必须更改您的逻辑,例如通过在第一个完成“恢复”工作服务器端后进行另一个 ajax 调用

    【讨论】:

    • 谢谢,我在想如果我将该数据保存到 result.txt 文件然后调用 javascript 计时器以检查新内容并从那里更新,当调用 ajax 成功时我停止计时器,这是正确的方法吗?
    • 感谢您的建议,只是想确定是否有更好的方法:).. 问候
    猜你喜欢
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多