通过PHP进行后台更新?

时间:2010-07-15 08:27:27

标签: php jquery mysql

我不知道是否只能使用PHP,但是想到这里会问......

我有一个PHP代码,每15天更新一次数据。我的问题是当它更新整个过程需要5秒以上,因此用户必须等到更新完成。

我正在寻找的是我想在用户查看内容时进行后台更新。或者在加载网页后显示更新闪烁的文本。

我目前的代码如下: -

$result = $db->sql_query("SELECT * FROM data1,data2,data3,data4 WHERE person='" .$name. "'");

$row = $db->sql_fetchrow($result);
$day = $row['regtime'];
$days = (strtotime(date("Y-m-d")) - strtotime($row['regtime'])) / (60 * 60 * 24);
if($row > 0 && $days < 15){

$row = ['name'];
$row = ['age'];
$row = ['place'];
$row = ['address'];
$row = ['lat'];
$row = ['long'];
$row = ['geo'];
//etc
}else{ //do update
//insert into database
}

3 个答案:

答案 0 :(得分:1)

好的马修,

这里的假设是你在页面上有一个id = myStatusDiv的空div。此外,它假设你有一个url / php文件/ home / longprocess。将jquery添加到页面,然后在页面底部添加以下内容:

<script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
            type: 'POST',
            data: "username=" + $("#username").val(),
            url: 'longprocess.php',
            beforeSend: function() {
                // you could also put a spinner img or whatever here too..
                $("#myStatusDiv").html("please wait, page being updated...");
            },
            success: function(result) {
                $("#myStatusDiv").html(result);
            }
        });
    });
</script>

基本上,当dom加载时,$ .ajax函数将在backgound中静默运行。完成后,myStatusDiv div将包含您从longprocess方法生成的任何状态消息。这可以是从简单的消息到页面上“几乎”整个部分的任何内容。你的php页面只需要搜索通过数据对象发送的命名参数 - 即在上面的例子中 - &gt; $ name = $ _POST ['username'];

网上有很多例子,这里有SO。

好运(提示:搜索谷歌搜索'php ajax jquery $ _POST');)

吉姆

[edit] - 当然,你必须在$,ajax方法中包含你的$ _POST变量......我假设你有一个文本框输入id =用户名。还有很多例子,但是我发现这是一个快速的例子:http://www.talkphp.com/vbarticles.php?do=article&articleid=58&title=simple-ajax-with-jquery

答案 1 :(得分:1)

您可以每晚通过cron作业运行脚本,而不是根据用户的请求运行更新。这样用户就不会受到打扰。

答案 2 :(得分:0)

mathew - 我不会对代码本身发表评论,足以说希望它不包含在页面本身中。无论如何,与此相关:)。 php / linux(据我所知)不会允许你产生新的线程,所以你最好的计划可能是通过$ ajax调用服务器方法。这样,它不受页面用户范围的影响,并会保持页面的响应。

正如我所说,希望上面的代码包含在一些可通过URL访问的类中。然后你只需调用方法并将html结果或一些简单的消息返回到状态div。