在我的网站上,我有一个jquery函数,可以在加载页面后立即从另一个(安全的)服务器检索数据。使用jsonp调用我当前在文档就绪事件后加载此数据:
<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检查的preinit。我的页面加载速度不快:)。感谢大家!
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);
});
});
}
答案 0 :(得分:5)
我认为你可以使用
if (jQuery) {
...
}
查看jQuery对象是否存在。
好的,更好的是:
if (typeof jQuery !== 'undefined') {
...
}
或
if (typeof jQuery === 'function') {
...
}
编辑:
不要担心开销或是否加载了jQuery对象。如果您只使用常规<script src="...">
标记包含jQuery库,然后执行不带$(document).ready
的代码,请执行以下操作:
<script type="text/javascript">
$.getJSON(_secureHost + '/base/members/current.aspx?callback=?', function (data) {
initPage(data);
});
</script>
它会起作用。 $(document).ready
部分只是为了确保在您尝试更改尚未加载的DOM元素之前已完全加载DOM。 jQuery库本身,包括Ajax功能,将立即存在。
现在,如果您的initPage(data)
调用使用了DOM,我认为它确实存在,那么可以对其进行检查,如下所示:
<script type="text/javascript">
function initPage(data) {
var $domObject = $('#your-dom-object');
if ($domObject.length === 0) { // Dom object not loaded yet.
window.setTimeout(function() {
initPage(data);
}, 0); // Try again after other stuff has finished.
return;
}
// Do your regular stuff here.
}
</script>
但是,我不认为在大多数情况下这是必要的。
答案 1 :(得分:1)
只要您将包含jQuery的脚本标记放在运行您的函数的脚本标记之上,那么它应该可以正常工作。
将脚本包装在此而不是就绪函数中可能会有所帮助:
(function() {
// Your code here
})();
答案 2 :(得分:0)
您可以添加加载完成功能或网格完成功能,如下所示,这将有助于您在jqgrid上执行某些操作
height : '550',
width : '787',
loadComplete : function() {}
gridComplete:function(){}
答案 3 :(得分:0)
您好我认为您应首先检查是否为jquery并且您要使用的方法是否已定义
if(typeof(jQuery)!='undefined'&amp;&amp; typeof($。ajax)!='undefined'){
//你的代码将来到这里 }
答案 4 :(得分:0)
你知道吗?!请注意您可能仍然有图像loading..etc我不喜欢上述内容 调用,实际上是jsonp 在文件准备好之前完成 事件
$(window).load(function() {
$.getJSON(_secureHost + '/base/members/current.aspx?callback=?', function (data) {
initPage(data);
});
});
答案 5 :(得分:0)
我使用的是footable jquery插件。这对我有用:
if ( $.fn.footable)
{...}
jquery版本 - 1.9.1 足部版本 - 0.5