我知道使用 PHP 不可能使用 AJAX 向 DOM 发送消息,因为整个脚本必须在响应可用之前执行。因此,看来我有两个选择:
- 将漫长的过程分成几个较小的过程,并在每个过程之后报告
- 将状态更新写入文件,然后让系统在进程执行时读取文件。
这两种方法有什么大的优点或缺点吗?
我知道使用 PHP 不可能使用 AJAX 向 DOM 发送消息,因为整个脚本必须在响应可用之前执行。因此,看来我有两个选择:
这两种方法有什么大的优点或缺点吗?
我不明白你在质疑什么方法,但这是你可以做的(使用 jQuery 和 PHP):
在 javascript 中,使用 window.setTimeout() 来调用使用 ajax 回调检查 url 的函数。
URL 用于 php 脚本,用于检查是否存在新消息。
PHP 脚本检查平面图块或数据库中的新消息,不确定您将使用什么。
然后脚本以直接的 html 标记、简单文本或 JSON 或 XML 格式打印消息。
成功时,ajax 调用,向页面上的某些选择器输出响应,并再次调用 window.setTimeout()。
这是 html 标记的一部分:
<div id="systemmessage">here goes new message</div>
这是 javascript 的一部分:
$(document).ready(function(){
window.setTimeout('checkForMessages()',5000); //sets for 5 seconds.
});
function checkForMessages(){
$.ajax(function(){
url: "checkformessages.php",
success: function(data){
if(data!=''){
$('#systemmessage').html(data); //place response in systemmessage
}
window.setTimeout('checkForMessages()',5000); //we set timeout again
}
});
}
这是称为“checkformessages.php”的 php 脚本的一部分:
$message = file_get_contents('messages.txt'); //check from file where you output new message
//or
$message='';
//use db table, with fields id (int autoincrement, primary), message(text), user_id (integer), created(integer, strtotime - timestamp)
$sql = 'SELECT * FROM system_messages WHERE user_id=somenumber AND created>(current time - 5 seconds)'; //this is more pseudo code, than correct syntax
$result = mysql_query($sql);
if(mysql_num_rows($result)>0){
while($row = mysql_fetch_object($result)){
$message.= $row->message.' <br/>';
}
}
if($message && $message!=''){
echo $messages;
}