A-A+
jquery实现动态加载js文件的例子
jquery动态加载有许多的方式并且也是非常的简单了,下文整理了一些关于jquery实现动态加载js文件的例子,希望这些动态加载js例子能够对各位有用。
一、jQuery getScript()方法加载javascript
jQuery内置了一个方法可以加载单一的js文件;当加载完成后你可以在回调函数里执行后续操作。最基本的使用jQuery.getScript的方法是这样:
- jQuery.getScript("/path/to/myscript.js", function(data, status, jqxhr) {/*
- 做一些加载完成后需要执行的事情
- */});
- 这个getScript方法返回一个jqxhr,你可以像下面这样用它:
- jQuery.getScript("/path/to/myscript.js")
- .done(function() {
- /* 耶,没有问题,这里可以干点什么 */
- })
- .fail(function() {
- /* 靠,马上执行挽救操作 */
- });
最常见的使用jQuery.getScript的地方是延迟加载一个js插件,而且在加载完成时执行它:
- jQuery.getScript("jquery.cookie.js")
- .done(function() {
- jQuery.cookie("cookie_name", "value", { expires: 7 });
- });
二、缓存问题
有一个非常重要的问题,使用jQuery.getScript时,你需要用一个时间戳字符串跟在需要加载的js地址后面,防止它被缓存。但是,如果你希望这个脚本被缓存,你需要设置全局缓存变量,像下面这样:
- jQuery.ajaxSetup({
- cache: true
- });
- jQuery.ajax({ url: "jquery.cookie.js", dataType: "script", cache: true }).done(function() { jQuery.cookie("cookie_name", "value", { expires: 7 }); });
在加载脚本时一定要小心缓存问题,动态加载Js、Css文件代码:
- //动态加载文件代码
- $.extend({
- includePath: ”,
- include: function (file) {
- var files = typeof fi le == “string” ? [fi le] : fi le;
- for (var i = 0; i < files.length; i++) {
- var name = fil es[i].replace(/^\s|\s$/g, “”);
- var att = name.split(‘.’);
- var ext = att[att.length – 1].toLowerCase();
- var isCSS = ext == “css”;
- var tag = isCSS ? “link” : “script”;
- var attr = isCSS ? ” type=’text/css’ rel=’stylesheet’ ” : ” language=’javascript’ type=’text/javascript’ “;
- var link = (isCSS ? “href” : “src”) + “='” + $.includePath + name + “‘”;
- if ($(tag + “[” + link + “]”).length == 0) document.write(“”);
- }
- }
- });
- //使用方法
- $.includePath = ‘Scripts/WorkSpace/';
- $.include([‘GetVehicleGroup.js’]);
注:代码系转载。不过已经使用过,很好使
2.立即使用Js文件中的方法
因为是动态加载的。考虑到网络原因。立即使用JS文件中的方法会报错。不过可以使用下边代码
- function _GetVehicleGroup() {
- if (“undefined” == typeof (GetVehicleGroupIsOk)) {
- setTimeout(“_GetVehicleGroup()”, 200);
- return;
- }
- //动态加载JS文件中的方法
- GetVehicleGroup();
- }
注:要在要加载的JS文件里加上一个标记,如:
var GetVehicleGroupIsOk = “enable”;
下面介绍三种异步执行加载Js 脚本的方法。
1、直接document.write
- <script language="javascript">
- document.write("<script src='test.js'><\/script>");
- </script>
2、动态改变已有script的src 属性
- <script src='' id="s1"></script>
- <script language="javascript">
- s1.src="test.js"
- </script>
3、动态创建 script元素
- <script>
- var oHead = document.getElementsByTagName('HEAD').item(0);
- var oScript= document.createElement("script");
- oScript.type = "text/javascript";
- oScript.src="test.js";
- oHead.appendChild( oScript);
- </script>
注:这三种方法都是异步的,所以在采用这类方法动态加载Js 的同时,主界面的Js脚本是继续执行的,所以可能出现通过异步加载的Js代码得不到预期的效果的情况。这时候可以考虑采用Ajax加载Js的方法。
大概原理:用XMLHTTP取得要脚本的内容,再创建 Script 对象。另外注意编码的保持一致。因为服务器与XML使用UTF8编码传送数据。