• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >jquery > 如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙

如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙

作者: 字体:[增加 减小] 来源:互联网 时间:2017-08-16

通过本文主要向大家介绍了JavaScript,执行顺序等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
1. 引言
在上一篇文章《如何确保JavaScript的执行顺序 - 之jQuery.html深度分析》中,我们揭示了jQuery.html函数之所以能在各种浏览器下保持动态JS顺序执行,其秘密在于 – 同步AJAX获取外部JavaScript。
我们先来简单回顾下HTML源代码(test2.htm):


下面进入本篇文章的主题:如果加载的JS是在其它域下面的,jQuery.html还能在各个浏览器下都能保证JS的顺序执行么?
2. 建立测试案例
1) 准备两个域名
为了测试,我在个人主页(http://sanshi.me/)下面临时创建了两个子域名,分别是:
http://test.sanshi.me/
http://test1.sanshi.me/
2) 更新Demo页面(test2_1.htm)
我会把test2_1.htm放在第一个子域名下,访问地址为http://test.sanshi.me/jsorder/test2_1.htm,其源代码如下:

test2_1.htm

使用jQuery.html函数动态加载其它域下的JavaScript

Firefox 3.6

IE 8

Chrome 10

Safari 4

Opera 11


3. jQuery.html并非万能钥匙,那么
不知道大家是否还记得我们在第一篇文章中提到的test3.htm不,这个结果和那个示例的结果一模一样,jQuery.html也并非万能钥匙。这不禁让我们怀疑这两个示例的内部逻辑是否一样?
但是第二篇文章不是明明白白告诉我们,jQuery.html使用的是同步AJAX的机制来加载外部JS的么?等等。。。。。。
大家有没有从上面的分析中发现问题,AJAX来加载其他域的资源,这不是明摆着违背了大名鼎鼎的同源策略(Same Origin Policy)了么?所以jQuery不可能这么实现,我们来看看jQuery.ajax文档是怎么说的:

看来我们在第二篇文章中看到的这个函数(evalScript)内部并非真的通过同步AJAX来获取数据:


4. 深入jQuery.ajax函数,看看怎么加载不同域下的JS文件

注释已经写的很清楚了,如果是通过GET方式请求JavaScript文件,并且这个文件是在其他域下面的(remote),那么就通过在head中添加script标签来处理,而不是走AJAX的流程。所以在这个条件分支结束的时候,直接从函数体返回:


经过分析,我们发现在动态加载不同域的JavaScript时,jQuery.html其实采用了在head中添加script标签的做法(不管是外部JS或者内联JS),这和我们在第一篇文章中提到的test3.htm是一模一样的逻辑,这也验证了我们的想法:

 

由此可见,如果想兼容CDN加速静态资源的情况,还必须使用第一篇文章中提到的“方案一,如何在动态添加script标签时确保执行顺序”。

5.     后记

本来这个系列的文章到这就应该结束了。不过在我测试jQuery1.5.1后,居然发现和我用的jQuery1.4.4是有差异的,早就听说jQuery1.5.1对AJAX部分进行了重构,没想到还真的对我们的代码有点影响。

 

具体是哪方面的影响,请看下一篇文章:如何确保JavaScript的执行顺序 - 之jQuery1.5.1与jQuery1.4.4的细微差异。待续。。。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 基于JQuery和原生JavaScript实现网页定位导航特效
  • JavaScript实现向select下拉框中添加和删除元素的方法
  • JavaScript与JQUERY获取元素的宽、高和位置
  • jqurey+Jscex打造游戏力度条
  • 关于JavaScript和jQuery的类型判断详解
  • Javascript函数中的arguments.callee用法实例分析
  • 如何在JS中实现相互转换XML和JSON
  • 举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
  • jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
  • json格式的javascript对象用法分析

相关文章

  • 2017-08-16基于jQuery实现收缩展开功能
  • 2017-08-16jquery马赛克拼接翻转效果代码分享
  • 2017-08-16JQuery.Ajax之错误调试帮助信息介绍
  • 2017-08-16jQuery选择器用法实例详解
  • 2017-08-16jQuery实现点击任意位置弹出层外关闭弹出层效果
  • 2017-08-16基于jquery的一个OutlookBar类,动态创建导航条
  • 2017-08-16jQuery监控文本框事件并作相应处理的方法
  • 2017-08-16JQuery+EasyUI轻松实现步骤条效果
  • 2017-08-16利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
  • 2017-08-16jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • jQuery插件datalist实现很好看的input下拉列表
    • jquery easyui 对于开始时间小于结束时间的判断示例
    • jQuery DOM删除节点操作指南
    • jquery checkbox全选反选效果代码
    • jQuery的Ajax的自动完成功能控件简要说明
    • jQuery中die()方法用法实例
    • jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
    • jQuery中clone()方法用法实例
    • jquery隐藏标签和显示标签的实例
    • Jquery结合HTML5实现文件上传

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有