【问题标题】:PHP, jQuery (AJAX) - Refresh InformationPHP, jQuery (AJAX) - 刷新信息
【发布时间】:2020-04-01 17:39:24
【问题描述】:

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

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

<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>

【问题讨论】:

    标签: php jquery ajax steam steam-web-api


    【解决方案1】:

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

    还要注意html()和attr()分别只接受一个和两个参数,所以每次调用的最后一个可以去掉。在任何情况下,最好使用prop() 而不是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。

    【讨论】:

    • 是的,现在我知道了,正在工作,我想错了,我的心态错了。
    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多