2011-01-07 72 views
7

在我的网站上,我有一个jquery函数,它在页面加载后立即从另一个(安全)服务器检索数据。使用JSONP调用我目前文档准备事件后加载此数据:测试jquery是否被加载没有使用文档就绪事件

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.getJSON(_secureHost + '/base/members/current.aspx?callback=?', function (data) { 
      initPage(data); 
     }); 
    }); 
</script> 

我不喜欢上面所说的,就是JSONP实际上可以在文档准备事件之前exectued,从而减缓页面加载。所以,如果我包括在页面内的jQuery(使用脚本标签即不引用),然后将下面的代码的伟大工程,加快网页载入速度:

<script type="text/javascript"> 
    $.getJSON(_secureHost + '/base/members/current.aspx?callback=?', function (data) { 
     $(document).ready(function() { 
      initPage(data); 
     }); 
    }); 
</script> 

但是包括在每一个页面jQuery是一个23K的开销,我” d喜欢避免。我如何测试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); 
       }); 
      }); 
     } 

回答

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元素之前完全加载。包括Ajax功能在内的jQuery库本身将会马上出现。现在

,如果您的通话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> 

不过,我不认为这将是在大多数情况下是必要

+0

这就是近了。但我不知道实际加载jquery需要多长时间。我不得不重复这个检查,直到jquery被加载。我可以创建一个每10ms左右检查一次的时间..但是这并不好。 – AyKarsi 2011-01-07 09:22:48

+1

啊,那是什么意思?我以为你的意思是你想测试jQuery是否被加载。在那种情况下,我非常肯定,当你退出`

1

只要您将包含jQuery的脚本标记放置在运行您的函数的脚本标记上方,它就可以正常工作。

结束语脚本在此,而不是现成的功能可以帮助:

(function() { 
    // Your code here 
})(); 
0

您可以添加任意加载功能齐全或网格功能齐全像图所示,这将帮助你做的jqGrid

一些操作
height : '550', 
    width : '787', 
    loadComplete : function() {} 
    gridComplete:function(){} 
0

您好我想你应该首先检查是jQuery和你要使用的方法被定义或没有

如果(typeof运算(jQuery的)!= '未定义' & &的typeof($。阿贾克斯)!= '不确定'){
//你的代码会来到这里
}

0

我不喜欢上面的 电话,就是JSONP实际上可以 文档准备 事件

你确定那之前exectued?请注意,您可能仍然有loading..etc
我猜你需要使用的图片:

$(window).load(function() { 
    $.getJSON(_secureHost + '/base/members/current.aspx?callback=?', function (data) { 
     initPage(data); 
    }); 
}); 

Link

0

我用footable jQuery插件。这为我工作:

if ($.fn.footable) 
{...} 

jQuery的版本 - 1.9.1 footable版本 - 0.5

相关问题