我正在尝试创建一个每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");
}
}
});
}
最佳答案
对象(任何非原始对象:数组是一个对象)将永远不会彼此相等,除非它们引用内存中的相同位置。比较时,您的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>');
})
}
});
}