Как использовать ответ данных в событиях, отправленных на сервер

Привет, я задал похожий вопрос несколько дней назад без каких-либо ответов. Я пытался решить это сам, но безуспешно.
Я успешно использовал отправленный сервером запрос, который опрашивает базу данных на предмет новых записей и успешно возвращает данные, возвращенные в формате json (подтверждено в веб-консоли). То, что я не могу сделать, это использовать данные в других функциях в функции 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>

Это страница обработки 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
}

Я пытаюсь получить данные json из ответа, чтобы я мог использовать их в других функциях скрипта.
Кто-нибудь может помочь, пожалуйста?

1

Решение

Получаемое вами сообщение является строкой JSON, его нельзя перебрать, пока оно не будет проанализировано в объект Javascript.

Во-вторых, у вас нет никаких данных, вы используете data, но он никогда нигде не определен, а то, что вы хотите, это event.data

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
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]