异步加载js文件的方法总结

摘要:
=null){varoScript=document.createElement;oScript.type=“text/javascript”;oScript.src=fileUrl;rootObject.appendChild;}},//加载跳过。addJs=function{varoXmlHttp=Skip.getXmlHttpRequest();oXmlHttp.onreadystatechange=function(){//事实上,在第二次调用中导入js时,由于浏览器中存在*.js文件,因此它不会访问服务器,也不会执行此方法。此方法仅在{/www.11cn.net设置为异步时使用{//200读取相应的url文件,404表示文件Skip.includeJsSrc;}不存在else{alert;}}//1.True表示脚本将在send()方法之后继续执行,而无需等待服务器的响应,并且在open()方法中调用onreadystatechange()。0;// 设置缓存js=create//创建jsfn&am

方法一,jQuery.getScript

HTML 代码:

代码如下 复制代码
<button id="go">Run</button>
<div class="block"></div>

jQuery 代码:

jQuery.getScript("http://dev.jquery.com/view/trunk/plugins/color/jquery.color.js",
function(){
$("#go").click(function(){
$(".block").animate( { backgroundColor: 'pink' }, 1000)
.animate( { backgroundColor: 'blue' }, 1000);
});
});

方法三

代码如下 复制代码
同步加载,单步加载,引入js内容可以直接使用
var Skip={};
//获取XMLHttpRequest对象(提供客户端同http服务器通讯的协议)
Skip.getXmlHttpRequest=function (){
if ( window.XMLHttpRequest ) // 除了IE外的其它浏览器
return new XMLHttpRequest() ;
else if ( window.ActiveXObject ) // IE
return new ActiveXObject("MsXml2.XmlHttp") ;
},
//导入内容
Skip.includeJsText =function (rootObject,jsText){
if ( rootObject != null ){
var oScript = document.createElement( "script" );
oScript.type = "text/javascript";
//oScript.id = sId;
//oScript.src = fileUrl;
//oScript.defer = true;
oScript.text = jsText;
rootObject.appendChild(oScript);
//alert(oScript.text);
}
},
//导入文件
Skip.includeJsSrc =function (rootObject, fileUrl){
if ( rootObject != null ){
var oScript = document.createElement( "script" );
oScript.type = "text/javascript";
oScript.src = fileUrl;
rootObject.appendChild(oScript);
}
},
//同步加载
Skip.addJs=function(rootObject, url){
var oXmlHttp = Skip.getXmlHttpRequest() ;
oXmlHttp.onreadystatechange = function(){//其实当在第二次调用导入js时,因为在浏览器当中存在这个*.js文件了,它就不在访问服务器,也就不在执行这个方法了,这个方法也只有设置成异步时才用到
if ( oXmlHttp.readyState == 4 ){ // www.111cn.net 当执行完成以后(返回了响应)所要执行的
if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 ){ //200有读取对应的url文件,404表示不存在这个文件
Skip.includeJsSrc( rootObject, url);
} else{
alert( 'XML(www.111cn.net) request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')' ) ;
}
}
}
//1.True 表示脚本会在 send() 方法之后继续执行,而不等待来自服务器的响应,并且在open()方法当中有调用到onreadystatechange()这个方法。通过把该参数设置为 "false",可以省去额外的 onreadystatechange 代码,它表示服务器返回响应后才执行send()后面的方法.
//2.同步执行oXmlHttp.send()方法后oXmlHttp.responseText有返回对应的内容,而异步还是为空,只有在oXmlHttp.readyState == 4时才有内容,反正同步的在oXmlHttp.send()后的操作就相当于oXmlHttp.readyState == 4下的操作,它相当于只有了这一种状态.
oXmlHttp.open('GET', url, false); //url为js文件时,ie会自动生成 '<script src="http://t.zoukankan.com/*.js" type="text/javascript"> </scr ipt>',ff不会
oXmlHttp.send(null);
Skip.includeJsText(rootObject,oXmlHttp.responseText);
}
};
var rootObject=document.getElementById("divId");
Skip.addJs(rootObject,"test.js")//test.js文件中含有funciotn test(){alert("test");}
test();//即使马上调用也不会出错了.
</script>

方法三,自己用的加载js文件,支持多文件,不兼容ie

代码如下 复制代码

/**
* 加载js文件
* @param {string || array} url js路径
* @param {Function} fn 加载完成后回调
* @return {object} game对象
* @example
* getScript("url.js",fn)
* getScript(["url-1.js","url-2.js"],fn)
*/
game.getScript = (function() {
var cache = {};//内部缓存下url,下次则不请求
return function(url, fn) {
if ("string" === typeof(url)) {
url = [url]; //如果不是数组带个套
};
var i = 0,//循环起
ok = 0,//加载成功几个js
len = url.length,//一共几个js
head = document.getElementsByTagName("head")[0],
js, _url,
create = function(url) {//创建js
js = document.createElement("script");
js.type = "text/javascript";
js.src = url;
head.appendChild(js);
return js;
};
for (; i < len;) {
if (cache[encodeURIComponent((_url = url[i++]))]) {//如果加载过
(++ok >= len && fn) && fn();//如果加载完所有的js则执行回调
continue;
}
cache[encodeURIComponent(_url)] = !0;//设置缓存
js = create(_url);//创建js
fn && (js.onload = function() {
if (++ok >= len) {//如果加载完所有的js则执行回调
fn();
}
});
};
head = js = _url = create = null;
return this;
}
})();

from:http://www.111cn.net/wy/js-ajax/58715.htm

免责声明:文章转载自《异步加载js文件的方法总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(转)linux shell 数字计算详解Django知识总结(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

My97DatePicker控件调用

引用My97DatePicker,在要使用的jsp页面中引入js,如下 <script type="text/javascript" src="<%=request.getContextPath() %>/dd/js/My97DatePicker/WdatePicker.js"></script> 调用My97DateP...

在IAR平台建立STC8ASK64S4A12单片机工程

转载:http://www.51hei.com/bbs/forum.php?mod=viewthread&tid=168481&page=1#pid737250  一般我们使用STC单片机都是基于老旧的KEIL v4.0平台,STC官方给的头文件也是只支持keil v4.0平台。我们如果要在其他平台比如IAR上开发STC8ASK64S4A1...

tp配置+路由+基本操作

 一、打开apache 的配置文件httpd_conf添加以下代码 <VirtualHost *:80>DocumentRoot "D:wwwroot hinkphppublicindex.php"  #网站运行目录ServerName tp.com #域名</VirtualHost><VirtualHost *:80>...

js自定义对象

一,概述 在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类、Hashtable类等等。 目前在Javascript中,已经存在一些标准的类,例如Date、Array、RegExp、String、Math、Number等等,这为我们编程提供了许多方便。但对于复杂的客户端程...

Javascript加载执行问题探索

楼主做前端开发一年多了,对前端的见解还是多多少少有一点的,今天特拿出来跟大家分享分享。 做前端开发少不了各种利器。比如我习惯用的还是Google浏览器和重型武器Fiddller。 一: 原始情况 首先大家看看如下的代码: 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Defa...

Base64和urlencode

https://www.jianshu.com/p/b611e220ef2d Base64 使用base64的初衷。是为了方便把含有不可见字符串的信息用可见字符串表示出来 我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。 而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的...