我有一个 jQuery 函数,它每 10 秒动态轮询我的 Django 视图以查看是否添加了新数据:
setInterval(function() {
$.get('pollNewEntries', {}, newEntrySuccess)
}, 10000);
function newEntrySuccess(result) {
$.each(result, function(index, value) {
var dateString = new Date(value.fields.pubDate);
dateString = dateString.toDateString() + " - " + dateString.toTimeString();
var title = "<h1>" + value.fields.title + "</h1>";
var authorAndDate = "<h4>" + value.fields.author +
" - <time datetime='>" + value.fields.pubDate + "'>" + dateString +
"</time>" + "</h4>";
var text = "<div class='cutText'>" + value.fields.text; + "</div>";
var html = "<article class='text'>" + title + authorAndDate + text + "</article>";
$('#mainLeft').prepend(html);
});
}
});
这行得通,但我保守地构造了轮询间隔和视图以考虑任何延迟时间,因此视图通常会为两个或多个单独的 Ajax 调用返回同一篇文章作为“新”文章。
我想要做的是将以前遇到的任何新文章的 id 保存到某种集合中。然后我可以在每次 Ajax 调用返回结果时查询该集合,确保之前没有遇到过该文章,并且只有在它是新的时才继续。
我可以设置一个简单的全局列表(或自定义的集合/字典,虽然文章的数量可能很少,因此性能不会有太大差异)来做到这一点,或者我可以用 cookie 来做到这一点,但我认为 cookie 开销对于这个应用程序来说有点矫枉过正,我知道任何全局的东西在 javascript 中都是特别有毒的。还有其他建议,或者在这种情况下走向全球是最好的选择吗?