我在API中有以下JSON数据:
[
{
notification: "'James' has created a new user. This requires
approval",
read: null
}
]
我有以下jQuery:
$.ajax({
dataType: "json",
url: "/api/notifications",
success: function(data) {
counterText = 0;
$.each(data, function(index, value) {
if(value.read == 0 || value.read == null)
{
var theCounter = parseInt($('.counter').text());
counterText += theCounter += 1;
}
});
$('.counter').text(counterText);
}
});
问题是这只有在有人刷新浏览器时才有效。我正在使用Socket.io来进行实时通知,但是,每次进入套接字时,我理想情况下都需要更新此代码。例如,一个名为" Ping&的事件#34;
socket.on("test-channel:App\\Events\\Ping", function(message) {
$.toast({
heading: 'Information',
text: message.data.message,
icon: 'info',
loader: false, // Change it to false to disable loader
loaderBg: '#9EC600' // To change the background
});
});
然而,有很多事件,所以我真的不想每次都要更新。理想情况下,我希望对此文件进行即时轮询,以便通知可以立即更新,而无需刷新浏览器。
答案 0 :(得分:1)
换句话说,听起来你想为你的AJAX方法添加一个轮询机制。 (套接字可以具有诸如延迟减少等优点,但它们可能稍微复杂一些,所以我理解为什么你现在可能不想尝试它们。)你当前所有的AJAX代码都缺乏实际上只是一个连续请求的机制。间隔。你可以用:
来做到这一点var polling = true;
var period = 60 * 1000; // every 60 seconds
var interval = polling && setInterval(function() {
if (polling) {
$.ajax({
... // existing ajax call here
});
} else {
if (interval) {
clearInterval(interval);
}
}
}, period);
// Later, if you want to stop polling, you can:
polling = false;
// ...or even just:
if (interval) {
clearInterval(interval);
}