javascript — серверные события & amp; Ajax Request

Используя PHP и JavaScript, я пытаюсь добавить на свой веб-сайт кнопку, которая будет «возобновлять» прямую передачу данных. Я могу успешно «остановить» подачу, я просто изо всех сил пытаюсь запустить ее снова.

Когда я прекращаю подачу, я сохраняю lastEventId исходя из сервера. Когда я нажимаю кнопку «Пуск», я снова использую это значение и отправляю AJAX-запрос на сервер. Это работает, и я могу получить lastEventId,

Мне нужна помощь, чтобы снова начать кормить с того места, где он был остановлен.

мой JS код;

<script type="text/javascript">
$("document").ready(function(){
var lastSerial;
var source = new EventSource("data.php");

source.onmessage = function(event) {
lastSerial = event.lastEventId;
document.getElementById("result").innerHTML += "New transaction: " + event.data + "<br>";
console.log(event.lastEventId); // returns the `lastEventId`
};
$("#start").click(function(){
$.ajax({
type: "POST",
url: 'data.php',
data: {lastSerial: lastSerial},
success: function(data){
// need to start the feed again here from where it left off, based on the returned `lastSerial` value
console.log(lastSerial) // returns an INT as expected
}
});
});
$("#stop").click(function(){
source.close();
});
});//end dom ready
</script>

<div id="result"><!--live feed here--></div>
<button id="stop"> stop</button>
<button id="start"> start</button>

мой data.php (Упрощенный);

if(isset($_POST['lastSerial'])) {
// SELECT TimeStamp, SerialNo ... WHERE SerialNo >= 'lastSerial' ...
// fetch results
// echo "data: " .$row["SerialNo"]. "\n\n";
}

Так что, как есть, я могу успешно остановить подачу. Когда я нажимаю начать lastSerial вошел в консоль.

Любой совет приветствуется.

0

Решение

Вместо того чтобы делать source.close() используйте флаг, чтобы определить, была ли остановлена ​​подача.

var is_stopped = false;

[...]

$("#stop").click(function(){
is_stopped = true;
});

Затем,

source.onmessage = function(event) {
/** If it is NOT stopped. **/
if (!is_stopped) {
lastSerial = event.lastEventId;
document.getElementById("result").innerHTML += "New transaction: " + event.data + "<br>";
console.log(event.lastEventId); // returns the `lastEventId`
}
};

Или же,

source.onmessage = function(event) {
/** If it IS stopped. **/
if (is_stopped)
return false;

lastSerial = event.lastEventId;
document.getElementById("result").innerHTML += "New transaction: " + event.data + "<br>";
console.log(event.lastEventId); // returns the `lastEventId`
};

Таким образом, вы на самом деле не убиваете событие, поэтому, когда вы хотите перезапустить канал, вы только что установили is_stopped в false и все возобновляется как раньше.

1

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector