基本上,我尝试做的是将参数通过URL传递给php代码,但是,似乎在on message事件的函数体中,我无法更改资源。这是以下代码:
var source = new EventSource("get_message.php?latest_chat_ID=0");
var i = 0;
$(source).on("message", function (event) {
var data = event.originalEvent.data;
++i;
source = new EventSource("get_message.php?latest_chat_ID=" + i);
// $.post("get_message.php", {latest_chat_ID: 0}, function (data, status) {});
$("#messages").html($("#messages").html() + data);
});
我想知道 -
我也理解存在替代技术,例如WebSockets和诸如node.js之类的库,它们更适合双向通信。但是,我的大多数基本代码都是在考虑SSE实现的情况下编写的,我想坚持这一点。
答案 0 :(得分:0)
如果您想继续使用SSE,我认为您需要重写与以下相似的内容。你现在所拥有的不起作用的原因是因为你只是在听第一个EventSource
,而只是改变变量。更改时,jQuery不会重用该变量。另外,我可能会跳过使用jQuery,因为它会尝试缓存你不想缓存的东西。
var listenToServer = function(i) {
source = new EventSource("get_message.php?latest_chat_ID=" + i);
source.onmessage = function(event) {
var data = event.originalEvent.data;
$messages.html($messages.html() + data);
listenToServer(i + 1);
}
},
$messages = $('#messages'),
source;
listenToServer(0);
我也继续进行缓存$('#messages')
,因此您不会反复创建新对象。在函数外部留下source
,这样您就不必担心使用各种EventSource
s进行垃圾回收。