A-A+
jquery ajax()动态加载脚本文件的例子
动态加载js本站介绍过不少的这实例了,但各有各的特点了,下面为各位介绍一个基于jquery ajax()动态加载脚本文件的例子,希望对各位朋友能够带来帮助。
上次说的jquery动态加载脚本,使用的是getScript(您可以点击相关文章查看),缺点和优点都说了。封装的函数是不自带缓存功能的,默认每次加载都刷新本地脚本。这样的一个特点对于网速不是很快的网站来说,那就是一个漫长的等待,虽然页面已经加载完毕了,但脚本还在路上,访客会以为脚本加载失败,就会反复的刷新页面,结果每次加载脚本都是重新获取的,造成资源的中断和大量的服务器请求。为了解决这个问题,我自己写了个方法,哈哈,当然是根据getScript把ajax方法打包到一个函数里便于多次复用。
- <!DOCTYPE html>
- <meta charset="utf-8">
- <title>动态加载js</title>
- <script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.8/jquery.min.js"></script>
- <script language="javascript">
- function yundanran_getScript(src,version,success,error)
- {
- var url=(version=='' ¦¦ !version)?
- src:
- (
- /\?.*/.test(src)?
- src+'&v='+version.replace(/\s/g,''):
- src+'?v='+version.replace(/\s/g,'')
- );
- $.ajax(
- {
- url:url,
- cache:true,
- type:'get',
- dataType:'script',
- success:function()
- {
- if(success && $.isFunction(success))
- success();
- },
- error:function()
- {
- if(error && $.isFunction(error))
- error();
- }
- });
- }
- yundanran_getScript('http://code.jquery.com/ui/1.8.24/jquery-ui.min.js',new Date().getTime().toString());
- </script>
结果显而易见,客户端没有缓存脚本。而如果把version参数缓存固定值,那么就会在第一次加载之后缓存在客户端。
写到这里,不知道您有没有想到,那就是脚本加载失败怎么办?您可能注意到ajax的error函数了,我们试试看:
正确资源的情况:
- <!DOCTYPE html>
- <meta charset="utf-8">
- <title>动态加载js</title>
- <script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.8/jquery.min.js"></script>
- <script language="javascript">
- function yundanran_getScript(src,version,success,error)
- {
- var url=(version=='' ¦¦ !version)?
- src:
- (
- /\?.*/.test(src)?
- src+'&v='+version.replace(/\s/g,''):
- src+'?v='+version.replace(/\s/g,'')
- );
- $.ajax(
- {
- url:url,
- cache:true,
- type:'get',
- dataType:'script',
- success:function()
- {
- if(success && $.isFunction(success))
- success();
- },
- error:function()
- {
- if(error && $.isFunction(error))
- error();
- }
- });
- }
- yundanran_getScript('http://code.jquery.com/ui/1.8.24/jquery-ui.min.js','2012',function()
- {
- alert('加载成功');
- },
- function()
- {
- alert('加载失败');
- });
- </script>
会弹出“加载成功”!
如果资源是无效的:
- <!DOCTYPE html>
- <meta charset="utf-8">
- <title>动态加载js</title>
- <script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.8/jquery.min.js"></script>
- <script language="javascript">
- function yundanran_getScript(src,version,success,error)
- {
- var url=(version=='' ¦¦ !version)?
- src:
- (
- /\?.*/.test(src)?
- src+'&v='+version.replace(/\s/g,''):
- src+'?v='+version.replace(/\s/g,'')
- );
- $.ajax(
- {
- url:url,
- cache:true,
- type:'get',
- dataType:'script',
- success:function()
- {
- if(success && $.isFunction(success))
- success();
- },
- error:function()
- {
- if(error && $.isFunction(error))
- error();
- }
- });
- }
- yundanran_getScript('http://code.jquery.com/ui/1.8.24/jquery-ui.min2.js','2012',function()
- {
- alert('加载成功');
- },
- function()
- {
- alert('加载失败');
- });
- </script>
显然url是404的,但并没有弹出“加载失败”。
如果真的是这样的话,那么脚本加载失败,我们就没法控制了。我先前还想,如果脚本加载失败继续加载,看来得另辟蹊径了。