【问题标题】:Making AJAX call without holding / intercepting page load在不保持/拦截页面加载的情况下进行 AJAX 调用
【发布时间】:2016-05-15 22:35:06
【问题描述】:

在不保留页面上正在加载的其他资产/资源的进度的情况下,通过/通过 AJAX 请求数据的最佳方式是什么?问题是需要从您的 AJAX 调用返回的数据/信息。例如,返回的数据将用于填充/生成您的 HTML 页面。

实际例子:

$.get("pageURI", {getVar:getVal}, function( data ){
   var response = data;
});
  1. 您可以使用 $(document),ready(function(){}); 包装您的代码并在文档准备好时生成 HTML,但同样,在 AJAX 调用中没有围绕您的页面生成逻辑,因此在 $.get(...)... 中,您如何确保页面仅填充您的内容因此,仅当您知道响应具有预期数据时,即为 !undefined。
  2. 我对 AJAX 调用包装器中的代码没有问题,但是如果您有很多依赖于响应的代码,换句话说,您有大约 10 到 15 个长函数和其他逻辑,是吗?建议将它们包裹在您的 AJAX 调用中?
  3. 我也知道可以将响应设置为窗口属性 (window.response)/全局变量,并且仅在页面完全加载后使用它,例如 $(window).bind("load", function(){}) ,因为它可能会在整个程序生命周期的各个地方使用,但这是一种好的编码习惯吗?

感谢您的回复。

【问题讨论】:

  • 我不关注。 AJAX 调用是异步的,不会阻碍页面加载或呈现。
  • 嗨 Wainage,我的问题可能不清楚并且对此感到抱歉,但我的意思是,正如我反复声明的那样,如果您查看我的代码 sn,我对部分问题的看法非常明确-p,您会看到在 $.get 函数中为数据设置了响应,如果您尝试在调用之外使用该变量(响应),您将得到未定义而不是预期值....是我的问题...
  • 没有办法解决这个问题......你必须等待它变得可用,因为 AJAX 调用需要时间。从该回调中更新您的页面。
  • 非常感谢!我认为除了我对 AJAX 的了解之外,还有另一种方法......我个人不喜欢在 $.get/post(...) 周围包装很多逻辑/代码。再次感谢。

标签: javascript jquery html ajax logic


【解决方案1】:

您可以根据需要呈现最小页面,并执行 Ajax 调用。当 Ajax 调用完成时,jQuery 为您提供了一个很好的回调来执行,您可以使用它来启动依赖它的其他函数。考虑一下:

var jqxhr = $.get( "/twiddle-bits", function(data, status, jqXHR) {
  // Here is where you call functions that do the second-stage data population
  apply_changes_after_ajax_call();
  update_some_other_things();
})
.fail(function() {
  show_error_messages();
});

这应该可以满足您的需求。 HTML 页面将在 Ajax 调用之前呈现,您可以在返回结果后更新 DOM。这就是它与这样的动态页面的工作方式。

【讨论】:

  • 谢谢迈克尔,我知道你的建议,我想知道是否有其他方法可以解决这个问题,但我可能想多了,并达到了我认为可以有更好方法的地步那。谢谢
  • @HlawuM 唯一的另一种方法是实现同步渲染,并且您希望在服务器上执行此操作。使用 Ajax 明确表示您希望在客户端进行异步渲染,因此您必须选择适合您情况的方法。
  • 我不会说它有/没有,正如我在第一条评论中强调的那样,你写的是我已经知道的,我正在寻找不同的东西,如果有的话。感谢您的回答和跟进。
猜你喜欢
  • 2018-01-20
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 2014-06-21
  • 2011-10-31
相关资源
最近更新 更多