我在页面上有一系列按钮,当用户点击它们时,它们会通过 jQuery .ajax()
触发 PHP 脚本。目前,我附加了一个串联的字符串转储"进度更新"通过success: function(data) { $('#divplaceholder').append(data); ...}
参数到状态占位符DIV。我的问题是我想打印实时进度更新到占位符DIV作为执行"回声"它们。
我已阅读了许多SSE示例,教程,进行了广泛的谷歌搜索,我想我对如何发送"消息"从服务器返回但我无法找到如何通过jQuery实际触发 tasker.php 的示例,以便在用户实际按下按钮时将更新发回。目前,我的.ajax()
调用是由jQuery .on('click')
事件触发的。
我在学习通过SSE发回更新以及如何触发执行 tasker.php 之间迷茫和迷茫(在某些情况下向其发送参数,例如{ {1}}让我这样做。
任何帮助清除这一点将不胜感激。
更新#2: Found this example但是一旦JavaScript加载就会被触发;我希望在单击按钮时触发执行。
更新#1:添加示例代码 (请原谅格式化,我是从移动应用程序发布的) 这是我现在如何实现它的摘要:
.ajax()
答案 0 :(得分:0)
首先,在客户端:
var server = null;
$('#button').on('click', function(){
if(server)server.close();
server = new EventSource('tasker.php?x=123');
server.addEventListener('message', function(e){
process(e.data);
if(e.data >= 100){server.close();server=null;} //6
}, false);
});
点数:
process()
将进行更新,并以某种方式更改网络浏览器显示。#6
在后端,PHP伪代码:
<?php
//Process inputs here
//If using sessions close them here
$lastProgress = 0;
while(true){
$progress = ... //1
if($progress == $lastProgress)continue; //2
echo "data:$progress\n\n"; //3, 4
@ob_flush();flush(); //5
//if($progress >= 100)exit; //6
}
点数:
$progress
只能是一个数字。如果它有可能是文本,你需要进行错误检查,或者json-escaping !! "data:"
前缀,"\n\n"
是SSE协议。#6
。作为最后一点,您可以坚持使用Ajax,并听取readyState
3(也称为彗星技术)。 (这就是你如何使它在IE11和更早版本的浏览器上运行;也是能够使用POST的唯一方法。)(请参阅我的书,使用HTML5 SSE的数据推送应用程序,以获取有关这些主题的更多信息。)