我正在尝试建立一个每5秒获取一次数据的通知系统,但我不知道为什么它无法正常工作。它无休止地输出通知,但它应该获取数据并将其与存储的最后数据进行比较,如果数据不相同,则应附加通知,如果相同,则应提醒“相同”。
var appliedData;
setInterval(getNotifications, 5000);
function getNotifications(){
$.ajax({
type: 'GET',
url: 'includes/socialplatform/friendsys/notifications.inc.php',
dataType: "json",
async: false,
success: function(data) {
if ( appliedData != data ) {
appliedData = data;
for(i=0; i < data.length; i++){
$( ".notification-container" ).append('<div class="notification"><p>' + data[i].user + '</p></div>');
}
}else{
alert("sammee");
}
}
});
}
答案 0 :(得分:1)
对象(任何非原语:数组是一个对象)永远不会彼此相等,除非它们引用内存中的相同位置。比较时,appliedData
将始终与您的data
不同,因此该条件始终会失败。如果响应字符串在表示相同对象时可以保证相同,则可以简单地比较字符串,如下所示。如果没有,您将不得不进行深度比较。
let lastDataStr;
setInterval(getNotifications, 5000);
function getNotifications() {
$.ajax({
type: 'GET',
url: 'includes/socialplatform/friendsys/notifications.inc.php',
dataType: "text", // change here, then parse into an object in success function
async: false,
success: function(newDataStr) {
if (newDataStr === lastDataStr) {
alert('same');
return;
}
lastDataStr = newDataStr;
const newData = JSON.parse(newDataStr);
newData.forEach(({ user }) => {
$(".notification-container").append('<div class="notification"><p>' + user + '</p></div>');
})
}
});
}