使用AJAX / PHP / JS在漫长的过程中报告多个状态消息

时间:2013-07-23 10:07:36

标签: php javascript css ajax wordpress

据我所知,使用PHP无法使用AJAX向DOM发送消息,因为整个脚本必须在响应可用之前执行。因此,似乎我有两个选择:

  1. 将长流程拆分为几个较小的流程并在每个
  2. 后报告
  3. 将状态更新写入文件,然后让系统在进程执行时读取文件。
  4. 这两种方法都有什么大的优点或缺点吗?

1 个答案:

答案 0 :(得分:1)

我还不明白你在质疑什么方法,但这是你可以做的(使用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
 }
});

}

这是php脚本的一部分,即“checkformessages.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; 
    }