试图使ajax将其最新数据与最新数据进行比较,但它不起作用

时间:2018-04-15 19:02:51

标签: javascript jquery ajax

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

1 个答案:

答案 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>');
      })
    }
  });
}