【问题标题】:How to prefetch an ajax call that returns a JSON format data in the browser如何预取在浏览器中返回 JSON 格式数据的 ajax 调用
【发布时间】:2015-04-19 09:22:21
【问题描述】:

我有一个用例,其中我在页面加载时进行了多个 ajax 调用。初始负载向服务器发出 ajax 请求以获取 JSON 格式的数据,在随后的用户单击时会触发其他 ajax 调用,这些调用会在服务器端进行数据库调用以计算 JSON,浏览器通常处于空闲状态并等待要返回的 JSON。我正在考虑一些可以从应用程序端加快执行速度的方法。

在 Jquery 中是否有一种方法可以预先触发后续的 ajax 请求并将其保存在客户端的某个位置,这样当用户单击页面时,JSON 会从缓存中解析并呈现在 DOM 中而不是对服务器的请求延迟。

【问题讨论】:

    标签: javascript jquery ajax json performance


    【解决方案1】:

    jQuery AJAX 请求正在被浏览器缓存(假设它是一个 GET 请求,POST 将始终访问服务器)。因此,如果您可以预测最有可能发生的调用,则可以在初始化期间剥离一个函数以抢先进行这些调用,并且您应该从浏览器缓存中获取后续调用的结果。不过,请确保服务器确实发送了适当的缓存标头。

    另一种选择是将 jQuery AJAX 函数的调用包装在您自己的函数中,并将数据保存在内存中的数组中。在这种情况下,请确保您有办法在某个时候老化旧结果,否则您将填满浏览器内存。

    【讨论】:

      【解决方案2】:

      您可以做的是在加载页面时触发所有 AJAX 请求,并将它们分配给承诺变量。当需要使用结果时,使用$.when()

      var ajax1 = $.ajax( { ... } );
      ...
      $.when(ajax1).then(function(response) {
          // Do what you need
      });
      

      你可以

      【讨论】:

      • 当没有收到响应并且用户通过点击触发ajax请求时会发生什么情况,原始请求会被取消吗?
      • 不,它不会被取消,除非您明确地输入代码。没有任何理由为用户提供一种方法来触发在页面加载时自动启动的 AJAX 请求。你对我的回答所做的只是添加处理响应的代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 2018-04-07
      • 2012-07-25
      • 1970-01-01
      • 2015-09-09
      • 1970-01-01
      相关资源
      最近更新 更多