我不知道是否只能使用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
}
答案 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。