立即启动AJAX请求,但在添加元素之前确保页面已经加载
Start AJAX request immediately but ensure page has loaded before adding elements?
我发现在网页的<head>
部分提交AJAX请求可以避免页面加载时的微小闪烁(其中AJAX加载的内容在加载时突然添加)。可以理解的是,当AJAX请求需要更长的时间时,这仍然需要改进以改善视觉外观,但在大多数情况下,这已经在访问者的浏览器缓存中了。
的例子:
<!DOCTYPE html>
<html lang="en">
<head>
...
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
$.get('{{jsonDataUrl}}', function(data) {
foo(data);
});
</script>
虽然这似乎表现得很好,但我担心AJAX响应可能会在页面完成加载之前返回。从概念上讲,我认为需要下列内容:
$.get('{{jsonDataUrl}}', function(data) {
// AJAX data received, wait until page has finished loading...
var id = setInterval(function() {
if (window.hasPageLoaded === true) {
clearInterval(id);
foo(data);
}
}, 0);
});
$(document).ready(function() {
window.hasPageLoaded = true;
});
是否有一种更简单的方法来确保在执行foo(data)
之前页面已经完成加载?
使用承诺:
var promise = $.get('{{jsonDataUrl}}');
$(function() {
promise.done(function(data) {
foo(data);
});
});
From jquery doc:
这允许您在单个请求上分配多个回调,甚至可以在请求完成后分配回调。(如果请求已经完成,则立即触发回调)
相关文章:
- 如何确保在AngularJS中,数据在使用之前先加载
- 如何确保coffeescript按顺序加载
- 如何确保外部JS代码作为第一个加载
- 如何确保angularjs app.js中的同步加载
- 确保数据在没有单独请求的情况下加载到视图中
- 如何确保网页或安卓应用程序中的所有css和js文件都已加载
- 操作方法确保在不使用 WebFont 加载器的情况下加载@font面
- 如何确保 javascript 只加载一次
- 如何确保在页面加载 jQuery 时加载第一张幻灯片
- 如何确保映像在 DOM 中完全加载
- 确保在页面重新加载jQuery时选中复选框
- 如何组织并确保在不将所有脚本和css放在每个页面上的情况下加载它们
- 确保一个AngularJS控制器先于另一个加载
- 如何确保所有元素都加载在html页面上,然后我们对CSS中的元素进行一些修改
- 如何用Javascript加载页面并对其进行MD5哈希处理,以确保它是我们要查找的页面
- 如何确保我的javascript函数只在加载所有外部java脚本后执行
- 如何确保IE8中body标记结束前javascript的加载顺序
- 确保在加载javascript之前加载了image
- Dojo AMD加载器是否确保模块只执行一次?
- JQuery已延迟加载.如何确保加载jQuery