Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 服务器使用PHP发送事件_Javascript_Php - Fatal编程技术网

Javascript 服务器使用PHP发送事件

Javascript 服务器使用PHP发送事件,javascript,php,Javascript,Php,我似乎找不到任何服务器发送事件的好例子 我的目标是向两个单独的div发送两条消息,但我是javascript新手,所以我不知道如何解析这两条消息,有人能告诉我正确的方向吗 如果有人能向我解释SSE是如何工作的,我可以运行这个php脚本send.php,将更新推送到网页上,或者javascript运行脚本本身吗 以下是我的PHP代码: <?php header('Content-Type: text/event-stream'); header('Cache-Control: no-cach

我似乎找不到任何服务器发送事件的好例子

我的目标是向两个单独的div发送两条消息,但我是javascript新手,所以我不知道如何解析这两条消息,有人能告诉我正确的方向吗

如果有人能向我解释SSE是如何工作的,我可以运行这个php脚本
send.php
,将更新推送到网页上,或者javascript运行脚本本身吗

以下是我的PHP代码:

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

$message = $row['message'];
$user = $row['user'];
echo "{$message}\n\n";
echo "{$user}\n\n";
flush();
?>

这是我的HTML/Javascript:

<div id="result"></div>

<script>
if(typeof(EventSource)!=="undefined")
{
var source=new EventSource("send.php");
source.onmessage=function(event)
{
document.getElementById("result").innerHTML+=event.data + "<br>";
};
}
else
{
document.getElementById("result").innerHTML="Sorry, your browser does not support server-sent events...";
}
</script>

if(typeof(EventSource)!=“未定义”)
{
var source=neweventsource(“send.php”);
source.onmessage=函数(事件)
{
document.getElementById(“结果”).innerHTML+=event.data+“
”; }; } 其他的 { document.getElementById(“结果”).innerHTML=“对不起,您的浏览器不支持服务器发送的事件…”; }
您只需将事件以JSON编码字符串的形式发送回服务器,并指示哪个div应该获得什么消息

$arr = array(
    'user' => $row['user'],
    'message' => $row['message']
)
echo json_encode($arr);
然后,解析来自服务器的JSON响应并对其执行逻辑。假设这两个div的ID分别为
user
message

source.onmessage=function(event){
    var $data = JSON.parse(event.data);
    for(key in obj){
        if (obj.hasOwnProperty(key)) { //ensure that we're not up in the prototype chain
            document.getElementById(key).innerHTML = $data[key];    
        }
    }
} 

这里的关系当然是
将是
用户
消息
。我们还希望有两个div,
id=“user”
id=“message”
,我们可以为它们修改innerHTML。这不是一个要求,但有助于简化流程。

因此,这应该可以在不刷新浏览器的情况下工作,我可以从服务器(PHP中的管理面板)运行它要将消息推送到已打开的浏览器?如果您以这种方式构建脚本,则该脚本中存在的任何数据都将动态创建。我将此标记为解决方案,因为它似乎拥有我需要的一切。但是你能在我的例子中告诉我应该如何使用$row['message']和$row['user']进行更新,如果这对你来说不是什么问题的话。请看我上面给你看的就是你所需要的。删除您的
echo
语句,用我的
$arr=array(
构造函数)替换它,然后添加
echo json\u encode($arr)
就完成了。我如何运行此javascript函数来加载php文件并显示值?换句话说,是什么触发服务器上导致发送消息的事件?