1

仅在新信息时刷新信息,并非总是如此。

仅在与响应不同时更新数据。

<script>
  $(document).ready(function(){
    setInterval(function() {
      $.ajax({
        type : "POST",
        url : "steam.php",
        cache : false,
        success : function(response) {
          var parsedResponse = $.parseJSON(response);
          $("#Display, [class='card-title display']").html(parsedResponse.display, parsedResponse.display);
          $("#AvatarFull, #AvatarSmall").attr("src", parsedResponse.avatar, parsedResponse.savatar);
          $("#Steam").attr("value", parsedResponse.display);
        }
      });
    }, 1000)
  });
</script>
4

1 回答 1

1

您可以通过将响应存储在变量中然后比较新响应来实现这一点。如果它们相同,则不要执行任何操作。

另请注意,html()andattr()只接受一个和两个参数,因此可以删除每个调用中的最后一个参数。在任何情况下,最好使用prop()over attr()。另外使用val(), 不attr()更新value控件。尝试这个:

$(document).ready(function() {
  let lastResponse;

  setInterval(function() {
    $.ajax({
      type: "POST",
      url: "steam.php",
      cache: false,
      success: function(response) {
        if (response != lastResponse) {
          var parsedResponse = $.parseJSON(response);
          $("#Display, [class='card-title display']").html(parsedResponse.display);
          $("#AvatarFull, #AvatarSmall").prop("src", parsedResponse.avatar);
          $("#Steam").val(parsedResponse.display);
          lastResponse = response;
        }
      }
    });
  }, 1000)
});

话虽如此,我强烈建议您为此使用观察者模式而不是 AJAX 轮询。这是因为它对服务器资源的压力要小得多,您可以将其配置为仅在有新信息可用时才发送更新。如果您想了解更多关于这项研究的 Websockets 和 SignalR。

于 2020-04-01T17:44:22.477 回答