我正在尝试创建一个每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>');
      })
    }
  });
}

10-05 22:53
查看更多