您可以通过 GET 发送数据。
例如
name=john&name=lea
这是一个简单的脚本,它使用 SSE 向服务器发送迭代次数和服务器返回进度。
这个项目包含两个文件(index.php 和 ssedemo.php)。
index.php 包含一个文本框和一个按钮。文本框假设包含 ssedemo.php 中循环的迭代次数
<h2>Server Sent Event Test</h2>
<form>
<label>Process Duration</label>
<input type="text" id="progVal">
<input type="button" value="Get Messages" onclick="updateProgress()"/>
</form>
<div id="container">
</div>
更新进度
function updateProgress() {
var input = $('#progVal').val();
var evtSource = new EventSource("ssedemo.php?duration=" + encodeURIComponent(input));
evtSource.addEventListener("progress", function (e) {
var obj = JSON.parse(e.data);
$('#container').html(obj.progress);
if( parseInt(obj.progress) == 100){
evtSource.close();
}
}, false);
}
此函数使用 jQuery 获取文本框的内容,然后创建一个eventSource。 EventSource() 构造函数接受一个或两个参数。第一个指定要连接的 URL。第二个以 EventSourceInit 字典的形式指定设置(如果有)。
您可以通过将其添加到 URL 来传递您想要的内容,就像使用 GET 一样。
"ssedemo.php?duration=" + encodeURIComponent(input)
在服务器端,你要根据W3C recommendation设置header类型和禁用缓存
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
然后你像往常一样使用 $_GET 获取数据。
$TotalNo = $_GET['duration'];
for ($i = 1; $i <= $TotalNo; $i++) {
updateProgress($i, $TotalNo);
sleep(1);
}
function updateProgress($currentVal, $totalNo) {
$completionPrecentage = $currentVal / $totalNo * 100;
echo "event: progress\n";
echo 'data: {"progress": "' . $completionPrecentage . '"}';
echo "\n\n";
ob_flush();
flush();
}
如果要发送数组可以参考this