- 浏览: 2620799 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1286)
- js-oop (2)
- js-window (10)
- js-event (19)
- js-string (37)
- js-array (27)
- js-page (4)
- js-dom (62)
- js-lang (8)
- js-number (7)
- js-platform (3)
- js-object (15)
- js-element (3)
- js-browser (7)
- js-url (6)
- js-date (10)
- css基础 (48)
- css优化 (15)
- html基础 (17)
- html标签 (19)
- js基础 (117)
- js-兼容性差异 (33)
- js引擎 (3)
- js性能 (14)
- json (6)
- jQuery源码浅析 (43)
- web mobile开发资料 (78)
- js跨域 (2)
- html5 (74)
- html5-canvas (7)
- css3 (53)
- 浏览器 (5)
- api设计学 (3)
- js-加载 (3)
- linux (37)
- 架构师 (1)
- php (2)
- self开发的脚本库--凤凰 (2)
- web应用名词 (6)
- javascript新特性翻译 (8)
- ajax (6)
- jQuery动画效果 (7)
- prototype的解读 (13)
- 优秀插件翻译 (1)
- css解决方案 (26)
- 数据库 (2)
- english daily (59)
- 浏览器内核探究 (1)
- jQuery插件介绍 (9)
- jquery基础篇 (26)
- chrome浏览器问题整理 (14)
- js选择器那些事 (3)
- 前端框架 (26)
- Firefox私有属性 (11)
- webkit私有属性集合 (17)
- 书籍推荐 (21)
- 数据结构 (1)
- 网站建设相关 (7)
- 好文翻译 (2)
- 个人作品 (3)
- kissy的解读 (4)
- css-layout(布局研究) (5)
- less研究 (1)
- YUI探究 (1)
- hash探究 (1)
- js动画 (7)
- 前端面试题 (37)
- css书写规范 (1)
- js模板引擎 (6)
- js模块化 (19)
- 编写高质量代码 (3)
- 性能探究--应用协议 (2)
- 前端图像处理 (19)
- Mac OS相关 (21)
- 正则表达式 (11)
- 离线应用相关 (0)
- 前端工具 (65)
- nodeJS (55)
- jquery优化篇 (2)
- 设计模式探究系列 (3)
- windows7 (2)
- IE10 (10)
- 微博开放平台探究 (2)
- 常用web服务接口 (1)
- 数据存储相关 (8)
- 零时文件 (2)
- jQuery Mobile (16)
- backbone (15)
- underscore (22)
- sass (11)
- android (3)
- phonegap (10)
- IE私有 (11)
- qwrap (8)
- git (14)
- chrome extensions (5)
- freemarker (11)
- angularJS (3)
- seo (2)
- markdown (3)
- css动画 (4)
- 安卓开发 (2)
- React (7)
- 活动页技术 (1)
- 网络安全 (3)
- grunt (7)
- Lo-Dash (3)
- 前端国际化 (4)
- 版本控制 (2)
- 盒模型 (4)
- 微信开发 (1)
- Mock数据工具 (1)
- sails (1)
- vim (1)
- js-color (1)
- iOS 基础 (43)
最新评论
-
jertom:
<div id="showInfo" ...
addEventListener等事件监听的参数细谈 -
乌托邦国王:
引用[u][/u]
css3动画属性系列之transform细讲移动translate -
hvang1988:
能提供附件下载吗,找不到js库,google封了访问不了
Syntaxhighlighter---代码高亮插件介绍 -
sscsacdsadcsd:
我的天 那到底是为什么function是object我看und ...
typeof func ==='function'的疑惑 -
wkjiangwk:
试了,没用,你们从不去测试。
介绍一下x-webkit-speech -------实现语音输入
Ajax系列开篇----有兴趣的同学可以看看《Ajax实战:实例详解》
简单记录,个人学习。
1. Ajax的名片
- Asynchronous JavaScript and XML (异步JavaScript和XML)。
- 是Jesse James Gaiiett创造的名词,是指一种创建交互式的网页应用的网页开发技术。
2. Ajax的优势
- Ajax不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。
- 使用JavaScript的XMLHttpRequest对象来直接与服务器进行通信,这样可在不重载页面的情况与Web服务器进行数据的交换。
- 在浏览器与Web服务器之间使用异步数据传输(HTTP请求),使网页从服务器请求少量的信息,而不是整个页面。(其实简单通俗地讲就是局部刷新,非全屏刷新)
3. 开发模式
- Ajax开发和传统的CS开发有不同,最大的问题在于易用性。由于Ajax依赖浏览器的JavaScript和XML,浏览器的兼容性和支持的标准也变得和JavaScript的运行时性能一样重要。
- Ajax开发人员需要理解传统的MVC架构,也需要考虑CS环境的外部和使用Ajax技术来重定型MVC边界。
- Ajax开发人员必须禁止以页面集合的方式来考虑Web应用而需要将认为是单个页面
一些常识性的东西就简单地介绍到这里,有兴趣的同学可以看看文章后面的链接还有我推荐的那本书,或者差异网上的各种资料。
下面我要重点说明的是XMLHttpRequest。
1 . 什么是XMLHttpRequest对象?
------------它是用于在后台与服务器交换数据。
XMLHttpRequest对象在大部分浏览器上已经实现而且拥有了一个简单的接口允许数据从客户端传递到服务端,但并不会打断用户当前的操作。使用XMLHttpRequest传送的数据可以是任何格式,虽然从名字上建议XML格式的数据。
2. 如何创建XMLHttpRequest对象?
我先讲一下我的创建思路是这样的,我会展示一些框架封装的创建过程例如jQuery,也会直接贴出一些网上人自己总结的版本,让大家在学习或者编写自己脚本库的时候参考一下。
/* 创建的过程主要还是浏览器的兼容问题 IE浏览器的多个版本 FF和其他原生支持XMLHttpRequest */ function createXMLHttpRequest(){ var xmlrequest; //判断语句创建 if(window.XMLHttpRequest){ xmlrequest = new XMLHttpRequest(); }else{ //各个版本考虑进去 var MXML = ["MSXML2.XMLHTTP.7.0","MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0",
"MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"]; //for循环 for(var i = 0;i<MXML.length;i++){ try{ xmlrequest = new ActiveXObject(MXML[i]); break; }catch(e){} } } }
可能有的人看到上面的代码就烦躁了,呵呵,我打的也酸啊。如果是我的话,我能不用判断语句的话就不用(I mean if...)
回来看看JQuery的创建过程。你会发现差距就出现了。
//先看一个早期的版本1.3.1 //源码地址http://code.jquery.com/jquery-1.3.1.js //抽取其中的一段 /*Create the request object;Microsoft failed to properly(正确) implement(实现) the XMLHttpRequest in IE7,so we use the ActiveXObject when it is available(可用) */ xhr:function(){ return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); }
再来一个版本
/* 这是1.4.1的版本 地址 http://code.jquery.com/jquery-1.4.1.js */ xhr : window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ? function(){return new window.XMLHttpRequest(); } : function(){ try{ return new window.ActiveXObject("Microsoft.XMLHTTP"); }catch(e){} }
我们停一下,如果是你,你会对这段代码进行怎样的重构??
/* 1.4.4的版本 */ if(window.ActiveXObject){ jQuery.ajaxSettings.xhr = function(){ if(window.location.protocol !== "file:"){ try{ return new window.XMLHttpRequest(); }catch(e){} } try{ return new window.ActiveXObject("Microsoft.XMLHTTP"); }catch(e){} } }
其实当初在研究这个版本差异的api的时候,1.4.4的版本的写法让我有点诧异,如果是我去做这个重构的话,我可能选择的还是直接到下面这个版本。
/* 版本为1.5.1 */ jQuery.ajaxSettings.xhr = window.ActiveXObject ? function(){ return !this.isLocal && createStandardXHR() || createActiveXHR() ; } : createStandardXHR; function createStandardXHR() { try { return new window.XMLHttpRequest(); } catch( e ) {} } function createActiveXHR() { try { return new window.ActiveXObject( "Microsoft.XMLHTTP" ); } catch( e ) {} } var rlocalProtocol = /(?:^file|^widget|\-extension):$/, ajaxLocParts, rurl = /^([\w\+\.\-]+:)\/\/([^\/?#:]*)(?::(\d+))?/; ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ); function isLocal { rlocalProtocol.test( ajaxLocParts[ 1 ] ) }
当然有兴趣挖掘和研究技术的同学可用看看,很多人在研究jQuery源码的时候可能是按照某一个特定的版本,我个人觉得,如果你是基于jQuery做一套框架的话,你可用性能调研选择一个稳定的版本,但是如果你做某一个api的调研,你可用查看各个版本的差异, 这样你会发现重构了那些?思考一下为什么这么做?如果是你你会咋改?
说的好多。希望能帮助到大家学习。
参考资料如下
发表评论
-
实现一个 ajax
2017-02-27 19:47 0如何实现一个 ajax? ... -
readyState总结
2013-01-07 19:45 1368关于readyState的状态: 0 未初始化 ... -
关于get请求的优势
2012-11-05 21:29 1488主要内容来自: http://josephscott. ... -
jquery ajax的各个事件执行顺序
2012-09-17 15:39 1577关于ajax的一些配置事件的触发顺序做了一些总结: ... -
再谈window.ActiveXObject
2012-08-03 14:27 2347其实前面写过一篇《Ajax系列之XMLHttpRequest对 ... -
overrideMimeType
2012-07-24 22:38 3459var http_request = new XMLHt ... -
浅谈数据传输之请求数据
2012-01-17 20:47 0常见的5种技术向服务器请求数据: XMLHttpRequ ...
相关推荐
Ajax的核心在于**XMLHttpRequest对象**,它使得Web应用程序可以在不刷新整个页面的情况下与服务器进行异步通信。 #### 二、XMLHttpRequest对象概述 XMLHttpRequest对象是实现Ajax功能的关键组件。它提供了一种在...
XMLHttpRequest对象是AJAX(异步JavaScript和XML)技术的核心,它允许Web应用程序在不刷新整个页面的情况下与服务器进行数据交换,从而实现更加流畅和互动的用户体验。在现代浏览器中,无论是在JavaScript、Jscript...
**Ajax系列教程1** 在Web开发领域,Ajax(异步JavaScript和XML)是一种改变游戏规则的技术,它使得网页能够在不刷新整个页面的情况下与服务器进行数据交互。本教程将引导你深入理解Ajax的基础知识,助你在Web2.0的...
JavaScript是实现Ajax的关键,负责构建XMLHttpRequest对象,这是Ajax通信的基础。XML虽在早期被用作数据交换格式,但现在JSON(JavaScript Object Notation)更常见,因为它的解析更简单且更高效。 二、服务器端...
这个系列教程的第九部分,我们聚焦于“Ajax系列教程 9”,它将深入探讨Ajax如何在网页开发中发挥重要作用,特别是在提升用户体验方面。 Ajax的核心原理是利用JavaScript异步地与服务器进行通信,同时通过XML或JSON...
**AJAX系列 CHM格式** AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新,提升了用户体验。...
最后,我们不能忽视AJAX库对XMLHttpRequest对象的改进。它提供了ScriptManager和UpdatePanel等组件,使得异步更新页面变得更加简单。通过这些组件,开发者可以轻松实现无刷新的数据更新,提升用户体验。 总的来说,...
2. **JavaScript事件处理**:当请求被发送到服务器后,XMLHttpRequest对象会触发一系列的事件,如onreadystatechange。开发者可以注册这些事件的回调函数,以便在合适的时候执行相应的操作,例如检查readyState和...
【Ajax系列2:使用JavaScript和Ajax发出异步请求】 在Web开发中,传统的请求/响应模型通常是用户点击按钮,浏览器发送整个页面请求给服务器,服务器处理后返回一个新的HTML页面,浏览器再重新渲染。这种模式在Web ...
1. **XMLHttpRequest对象**:这是Ajax的基础,它允许JavaScript在后台与服务器通信。通过创建XMLHttpRequest实例,设置HTTP请求的方法、URL和类型,然后调用send()方法发送请求。当服务器响应时,XMLHttpRequest对象...
传统的Web应用程序通常依赖于用户的操作(如点击按钮)触发整个页面的刷新,而Ajax则打破了这一模式,通过XMLHttpRequest对象在后台与服务器通信,只更新必要的部分,提高了用户体验。例如,用户在网页中填写表单并...
JavaScript是Ajax的核心,它负责创建XMLHttpRequest对象,向服务器发送请求,并处理服务器返回的数据。学习Ajax首先要掌握JavaScript的基本语法,包括变量、数据类型、控制流程、函数等。此外,理解DOM(Document ...
在本篇Java相关课程系列笔记之十一中,我们聚焦于Ajax的学习,这是一项在Web开发中广泛使用的技术,用于创建动态、无刷新的用户界面。Ajax全称Asynchronous JavaScript and XML,即异步JavaScript和XML,它允许网页...
5. **XMLHttpRequest对象的增强**:ASP.NET AJAX库对原生的XMLHttpRequest进行了封装,创建了` Sys.Net.XMLHttpExecutor`类,提供了一套更丰富的API,包括进度事件、错误处理等,使得与服务器的异步通信更加可控和...
**Ajax系列教程 4** 在Web开发中,Ajax(Asynchronous JavaScript and XML)技术是一种用于创建动态、交互性更强的网页应用的关键工具。它允许页面在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页...
Ajax的核心是XMLHttpRequest对象,它允许我们在后台与服务器交换数据并更新页面。在这些HTML文件中,可能定义了事件监听器,例如按钮点击,当用户触发这些事件时,会启动Ajax请求。JavaScript代码会创建...
- **创建XMLHttpRequest对象**:大多数现代浏览器都内置了XMLHttpRequest对象。 - **打开连接**:使用XMLHttpRequest对象的`open()`方法,指定请求类型(GET或POST)、URL和是否异步。 - **设置请求头**:对于POST...
其次,AJAX的核心在于XMLHttpRequest对象,它是JavaScript与服务器进行异步通信的桥梁。通过创建XMLHttpRequest实例,设置请求方法(GET或POST)、URL、HTTP头等信息,然后发送请求。在接收到响应后,可以处理返回的...
- **XMLHttpRequest对象**:这是Ajax的基础,用于在后台与服务器通信。通过创建XMLHttpRequest实例,我们可以发送HTTP请求并接收响应。 - **JavaScript事件处理**:监听用户行为,如点击按钮,触发Ajax请求。 - **...
**Ajax系列教程 8:设计高质量的Ajax应用** 在Web开发领域,Ajax(Asynchronous JavaScript and XML)技术已经成为构建交互式、动态网页的关键工具。它允许网页在不刷新整个页面的情况下,通过后台与服务器交换数据...