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

标签 php javascript css ajax wordpress

我知道使用 PHP 无法使用 AJAX 将消息发送到 DOM,因为整个脚本必须在响应可用之前执行。因此,看来我有两个选择:

  1. 将长流程拆分为几个较小的流程,并在每个流程之后进行报告
  2. 将状态更新写入文件,然后让系统在进程执行时读取该文件。

这两种方法有什么大的优点或缺点吗?

最佳答案

我不明白你问的是什么方法,但这是你可以做的(使用 jQuery 和 PHP):

在 javascript 中,使用 window.setTimeout() 来调用使用 ajax 回调的函数来检查 url。

URL 用于 php 脚本,用于检查是否存在新消息。

PHP 脚本检查平面图 block 或数据库中的新消息,不确定您将使用什么。

脚本然后以直接 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; 
    }

关于php - 使用AJAX/PHP/JS在一个较长的过程中报告多个状态消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17807165/

相关文章:

CSS3 : remove background image (background-image:none; not working)

php - sql : search column that starts with digits

JavaScript、UWP : Backgroundtask tracking keypress events

javascript - Firebase实时数据库: how to check if child value exists

javascript - if 函数未检测到从 php 函数返回的数据

css - 缺少 Bootstrap 下拉子菜单

PHP 类命名空间与前缀

php - Mysql查询从2个表中获取数据并在主类别下显示子类别

php - 音频元素在 Safari 5.1 中不起作用

html - 如何通过将鼠标悬停在 <a> S 上来切换/动画 <div>