Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Php 如何在服务器发送的事件中使用数据响应_Php_Jquery_Html_Server Sent Events - Fatal编程技术网

Php 如何在服务器发送的事件中使用数据响应

Php 如何在服务器发送的事件中使用数据响应,php,jquery,html,server-sent-events,Php,Jquery,Html,Server Sent Events,嗨,几天前我问了一个类似的问题,没有任何回答。我试图自己解决这个问题,但没有成功。 我成功地使用了一个服务器发送的请求,该请求轮询数据库以获取新条目,并成功地获取以json格式返回的数据(在webconsole中确认)。我似乎无法在eSource.onmessage函数的进一步函数中使用数据 这是jquery <script type="text/javascript"> $(document).ready(function() {//READY FUNC //ch

嗨,几天前我问了一个类似的问题,没有任何回答。我试图自己解决这个问题,但没有成功。 我成功地使用了一个服务器发送的请求,该请求轮询数据库以获取新条目,并成功地获取以json格式返回的数据(在webconsole中确认)。我似乎无法在eSource.onmessage函数的进一步函数中使用数据

这是jquery

<script type="text/javascript">

$(document).ready(function() {//READY FUNC   

    //check for browser support
    if(typeof(EventSource)!=="undefined") {
        //create an object, passing it the name and location of the server side script
        var eSource = new EventSource("http://newberylodge.co.uk/webapp/includes/messageRetrieve.php");
        //detect message receipt
        eSource.onmessage = function(event) {
            //write the received data to the page
            $.each(data, function(key, val) {
            //iterate each data
                var id = val.id;
                var messageId = val.messageId;
                var messageSubject = val.messageSubject;
                var messageContent = val.messageDetail;

                $('#serverData').append('<div id="' + id + '" class="messageAlert">' + messageSubject + '</div>');
                $('#serverData').append('<div id="' + messageId + '" class="messageContent">' + messageContent + '</div>');
                $('#' +messageId).append('<input id="' + messageId + '" type="button" class="deleteButton" value="Delete Message" />');

            });
            //EACH DATA
        }

        $(document).on('click', '#' +messageId, function(){
        //on click

            $.post("http://newberylodge.co.uk/webapp/includes/deleteMessage.php",{value1 : messageId}, function()   {
                location.reload(true);
                alert('Message Deleted');
            });
            //POST AJAX
        });
        //END ON CLICK
    };
    //TYPE OF EVENT SOURCE        

});
//DOCUMENT READY FUNC 
</script>

$(文档).ready(函数(){//ready FUNC
//检查浏览器支持
if(typeof(EventSource)!=“未定义”){
//创建一个对象,将服务器端脚本的名称和位置传递给它
var eSource=新事件源(“http://newberylodge.co.uk/webapp/includes/messageRetrieve.php");
//检测消息接收
eSource.onmessage=函数(事件){
//将接收到的数据写入页面
$。每个(数据、函数(键、值){
//迭代每个数据
var id=val.id;
var messageId=val.messageId;
var messageSubject=val.messageSubject;
var messageContent=val.messageDetail;
$('#serverData').append(''+messageSubject+'');
$('#serverData').append(''+messageContent+'');
$('#'+messageId).append('');
});
//每个数据
}
$(文档)。在('单击','#'+消息ID,函数()上{
//点击
$.post(”http://newberylodge.co.uk/webapp/includes/deleteMessage.php“,{value1:messageId},函数(){
位置。重新加载(true);
警报(“消息已删除”);
});
//后AJAX
});
//点击结束
};
//事件源的类型
});
//文件准备功能
这是PHP处理页面messageReturn.PHP

<?php

include_once 'db_connect.php';
$return_arr = array();
$result = mysqli_query($mysqli, "SELECT * FROM message");

while($row = mysqli_fetch_array($result)) {         
    $row_array['id'] = $row['id'];
    $row_array['messageId'] = $row['messageId'];
    $row_array['messageSubject'] = $row['messageSubject'];
    $row_array['messageDetail'] = $row['messageDetail'];

    array_push($return_arr,$row_array);

}

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

echo json_encode($return_arr);
flush();

?>

在这里,我相信我会出错,但不知道怎么做

        eSource.onmessage = function(event) {
            //write the received data to the page
            $.each(data, function(key, val) {
            //iterate each data
                var id = val.id;
                var messageId = val.messageId;
                var messageSubject = val.messageSubject;
                var messageContent = val.messageDetail;

                $('#serverData').append('<div id="' + id + '" class="messageAlert">' + messageSubject + '</div>');
                $('#serverData').append('<div id="' + messageId + '" class="messageContent">' + messageContent + '</div>');
                $('#' +messageId).append('<input id="' + messageId + '" type="button" class="deleteButton" value="Delete Message" />');

            });
            //EACH DATA
        }
eSource.onmessage=函数(事件){
//将接收到的数据写入页面
$。每个(数据、函数(键、值){
//迭代每个数据
var id=val.id;
var messageId=val.messageId;
var messageSubject=val.messageSubject;
var messageContent=val.messageDetail;
$('#serverData').append(''+messageSubject+'');
$('#serverData').append(''+messageContent+'');
$('#'+messageId).append('');
});
//每个数据
}
我试图做的是从响应中获取json数据,以便在脚本中的其他函数中使用它。
有人能帮忙吗?

您收到的消息是一个JSON字符串,在解析为Javascript对象之前无法对其进行迭代

其次,您似乎没有任何数据,您使用的是
数据
,但它从未在任何地方定义过,您需要的是
事件。数据

if (typeof (EventSource) !== "undefined") {

    var eSource = new EventSource("http://newberylodge.co.uk/webapp/includes/messageRetrieve.php");

    eSource.onmessage = function (event) {

        var data = JSON.parse(event.data);

        $.each(data, function (key, val) {
            var id = val.id;
            var messageId = val.messageId;
            var messageSubject = val.messageSubject;
            var messageContent = val.messageDetail;

            $('#serverData').append('<div id="' + id + '" class="messageAlert">' + messageSubject + '</div>');
            $('#serverData').append('<div id="' + messageId + '" class="messageContent">' + messageContent + '</div>');
            $('#' + messageId).append('<input id="' + messageId + '" type="button" class="deleteButton" value="Delete Message" />');

        });
    }

    .... etc
if(typeof(EventSource)!=“未定义”){
var eSource=新事件源(“http://newberylodge.co.uk/webapp/includes/messageRetrieve.php");
eSource.onmessage=函数(事件){
var data=JSON.parse(event.data);
$。每个(数据、函数(键、值){
var id=val.id;
var messageId=val.messageId;
var messageSubject=val.messageSubject;
var messageContent=val.messageDetail;
$('#serverData').append(''+messageSubject+'');
$('#serverData').append(''+messageContent+'');
$('#'+messageId).append('');
});
}
等

尝试在循环之前添加一个
类型的数据
,我打赌它是一个字符串,而不是一个对象,您需要执行
data=JSON.parse(数据)
所以你已经设法
控制台。在jQuery代码中记录返回的数据?@zac我有一个实时页面,在浏览器中我可以看到json的响应。这里有一个实时页面:@adeneo在脚本中我会把这些建议放在哪里,我在jqueryI很新。我已经做了更改,但在实时页面上没有任何变化。我已经让数据显示了你的想法p不做服务器发送事件的事情,所以我知道其他功能工作。我只需要轮询来识别有一条新消息,然后通知用户有一条新消息。我如何得到肯定的响应,然后通知用户并提示他们重新加载页面,然后我可以使用我知道有效的脚本,或者是此处的方法错误此答案看起来不错。如果仍然不起作用,请尝试在
JSON.parse()
行之后添加
console.log(data)
,然后签入Firebug以查看您在该阶段的确切情况。