Ajax: 每次点击时,会发送一个ajax请求,控制台将显示服务器发送的文本。
"server sent event":它会在随机时间向控制台发送文本。
如果我只使用Ajax,我可以从服务器收到数据。但是如果我同时使用这两种方法,我不能够从Ajax请求的响应中接收到来自服务器的数据,但仍然会接收到来自“服务器发送事件”的消息。我甚至没有收到Ajax请求失败的消息。有人能解释一下吗?
客户端
var evtSource = new EventSource("config/addRemoveEvent.php");
evtSource.onmessage = function(e) {
//var newElement = document.createElement("li");
console.log("listening: "+ e.data);
//newElement.innerHTML = "message: " + e.data;
//eventList.appendChild(newElement);
}
var data = {
'action':'Initiate brief calendar',
'selectedMonth': month,
'selectedYear': year
};
var $request = $.ajax({
type: "GET",
dataType: "text",
url: "config/addRemoveEvent.php",
data: data,
beforeSend: function(){
console.log('start sending request');
}
});
$request.fail(function(){
console.log('fail');
});
$request.done(function(data){
// change bg color of the cells that contain events;
console.log(data);
});
服务器
header("Content-Type: text/event-stream\n\n");
date_default_timezone_set("America/New_York");
while (1) {
if (!$counter) {
echo 'data: This is a message at time ' . $curDate . "\n\n";
$counter = rand(1, 3);
}
ob_flush();
flush();
sleep($counter);
}
// return the date has event in a given month
if($_GET['action'] == "Initiate brief calendar"){
echo 'hello';
}