javascript - 事件流 JavaScript 阅读器如何触发页面刷新?

标签 javascript php loops variables event-stream

这是多年来我第一次向任何社区发布问题。到目前为止,我已经使用 PHP/SQL 多年,在此期间我从来不需要处理 JavaScript。

所以也许你可以为我提供一些帮助,因为我已经尝试了所有方法但没有解决这个问题。

下面的脚本目前在 PHP 驱动的网站中正常运行。在事件流中,我发布由 dyntasks.php 从应用程序引擎更新的文件系统上的文本文件读取的更新

?><script type="text/javascript">
if(typeof(EventSource)!=="undefined") {
    var eSource = new EventSource("dyntasks.php");
    eSource.onmessage = function(event, previous) { 
        //if ( (previous !== event.data) ) {location.reload(true);};
        document.getElementById("serverData").innerHTML = event.data; 
    };
} else { document.getElementById("serverData").innerHTML="Whoops! Your browser doesn't receive server-sent events."; }
</script><?php

脚本更新了页面上的一个 block 并且它工作正常。

该 block 以这种形式显示文本:

2017-03-21 16:08:15: task 21624 completed
2017-03-21 16:11:08: task 21627 completed
2017-03-21 16:36:01: task 21629 completed
2017-03-21 17:52:08: task 21635 completed
updating...

现在,当特定任务 ID 完成时,我需要更新整个页面。 “taskid”已存储在变量中,并且也可在查询字符串中使用。

/index.php?id=taskmanager&fullpage=21624

我尝试了大约 20 个小时来更新 JavaScript 代码,但我无法将其安排为可以触发

location.reload(true)

您能给我一些提示吗?我想我只需要知道如何将 event.data 变量保存到全局变量中,以便在函数触发更新之前使用,但任何进一步的建议将不胜感激。

最佳答案

实现此目的的一种方法是将事件流从字符串更改为消息对象

而不是发送:

echo "2017-03-21 16:08:15: task 21624 completed";

你可以这样做:

echo json_encode(array(
    "action" => "task completed",
    "task id" => 21624,
    "ts" => "2017-03-21 16:08:15"
));

然后在 JavaScript 中你可以这样做:

eSource.onmessage = function(event) { 
    event = JSON.parse(event);
    if (event.action === "task complete") {
        document.location.href = "/index.php?id=taskmanager&fullpage=" + event["task id"];
    }
};

关于javascript - 事件流 JavaScript 阅读器如何触发页面刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42935027/

相关文章:

javascript - 在 iOS 7 Safari 中,如何通过边缘滑动与后退/前进按钮区分 popstate 事件?

php - 在/usr 下找不到 libmysqlclient。在 Ubuntu 12.4 上从源代码构建 PHP 5.2

php - Stanford Tagger.php 警告 : proc_open(): CreateProcess failed, 错误代码中的警告 - 0

python - 变量在某个地方失去了它的值(value)

java - 如何不在循环内打印所有内容,而是根据决策进行制作

php - 关联 php 数组中的下一个元素

javascript - 如何更新 bootstrap-typeahead.js 中的源选项

actionscript-3 - 如何在 Emacs 中控制左括号后的缩进

javascript - 在 Javascript 中更改 Onchange 事件的内容

php - 数据库总是接收相同的 ID