猿问

PHP, jQuery (AJAX) - 刷新信息

刷新信息,只有在它是新的时候,而不是总是。


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


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


墨色风雨
浏览 141回答 1
1回答

炎炎设计

您可以通过将响应存储在变量中然后比较新响应来实现此目的。如果它们相同,则不要执行任何操作。另请注意,html()andattr()仅分别接受一个和两个参数,因此可以删除每次调用中的最后一个参数。在任何情况下,首选做法是使用prop()over attr()。此外使用val(), 不attr()更新value控件。尝试这个:$(document).ready(function() {&nbsp; let lastResponse;&nbsp; setInterval(function() {&nbsp; &nbsp; $.ajax({&nbsp; &nbsp; &nbsp; type: "POST",&nbsp; &nbsp; &nbsp; url: "steam.php",&nbsp; &nbsp; &nbsp; cache: false,&nbsp; &nbsp; &nbsp; success: function(response) {&nbsp; &nbsp; &nbsp; &nbsp; if (response != lastResponse) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var parsedResponse = $.parseJSON(response);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $("#Display, [class='card-title display']").html(parsedResponse.display);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $("#AvatarFull, #AvatarSmall").prop("src", parsedResponse.avatar);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $("#Steam").val(parsedResponse.display);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lastResponse = response;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });&nbsp; }, 1000)});综上所述,我强烈建议您为此使用观察者模式而不是 AJAX 轮询。这是因为它对服务器资源的压力要小得多,您可以将其配置为仅在有新信息可用时发送更新。如果您想了解更多有关此研究的 Websockets 和 SignalR。
随时随地看视频慕课网APP
我要回答