我网站上有一个jQuery函数,它在页面加载时从另一个(安全的)服务器检索数据。使用jsonp调用,我目前在document ready事件之后加载此数据:
<script type="text/javascript">
$(document).ready(function () {
$.getJSON(_secureHost + '/base/members/current.aspx?callback=?', function (data) {
initPage(data);
});
});
</script>
我不喜欢上述调用的一点是,jsonp实际上可能会在文档就绪事件之前执行,从而拖慢页面加载速度。因此,如果我在页面中包含jquery(即不使用脚本标记引用),则以下代码可以很好地工作,并且页面加载速度更快:
<script type="text/javascript">
$.getJSON(_secureHost + '/base/members/current.aspx?callback=?', function (data) {
$(document).ready(function () {
initPage(data);
});
});
</script>
但是在每个页面中包含jquery会增加23k的开销,我想避免这种情况。如何测试是否已加载jquery并仅在加载jquery时执行initPage()函数?
编辑: 为了更精确,我需要重复检查jquery是否已加载,然后再执行事件。定时器可能是解决方案。
解决方案: 我创建了一个预初始化程序来检查jquery。我的页面加载速度非常快:)感谢大家!
function preInit()
{
// wait until jquery is loeaded
if (!(typeof jQuery === 'function')) {
window.setTimeout(function () {
//console.log(count++);
preInit();
}, 10); // Try again every 10 ms..
return;
}
$.getJSON(_secureHost + '/base/members/current.aspx?callback=?',
function (data) {
$(document).ready(function () {
initPage(data);
});
});
}
<script src="jquery.js">
标签时,jQuery 已经完成了加载。所以,只需删除围绕$.getJSON
调用的$(document).ready(function () { ... });
即可解决问题。 - Spiny Norman