JavaScript之Ajax
简介:AJax是在2005年被Adaptive Path的Jesse James Garrett发明的,用户概括异步加载页面内容的技术---说通俗点,Ajax就是实现局部页面通过JavaScript与后台服务器交互,并刷新页面的功能。
局限:AJax依赖于JavaScript,所以可能会有浏览器不支持(现在基本不用考虑这种情况),而且搜索引擎程序可能不会抓取到有关的内容。
下面就要开始说重点了:
1、Ajax的核心对象-XMLHttpRequest对象
这个对象充当着浏览器中的JS脚本(相当于客户端)与服务器之间的中间人的角色。以往的请求都由浏览器发出,而JavaScript通过这个对象可以自己发出请求,同时也自己处理服务器的响应。其相关的标准还比较新(参见HTML5),但这个对象的历史可谓久远,所以几乎得到了所有浏览器的支持,但问题是,不同浏览器实现XMLHttpRequest对象的方式都不太一样。为了保证跨浏览器,你不得不为同样的事情,写不同的代码分支。
这一点在IE中就很明显,不同的IE浏览器创建XMLHttpRequest对象的代码不同微软最早在IE5中以ActiveX名叫XMLHttp的对象,所以在IE中创建新的XMLHttp对象的代码就应该这样写:
var request=new ActiveXObject("Msxml2.XMLHTTP.3.0");
其他浏览器则基于XMLHttpRequest来创建对象:
var request=new XMLHttpRequest();
更麻烦的是不同的IE版本使用的XMLHTTP对象也完全不相同。为了兼容所有的浏览器,创建XMLHttpRequest对象的函数如下:
function getXMLHttpRequestObject() {
if (typeof XMLHttpRequest == "undefined") {
XMLHttpRequest = function () {
try {
return new ActiveXObject("Msxml2.XMLHTTP.6.0");
}
catch (e) {
return new ActiveXObject("Msxml2.XMLHTTP.3.0");
}
try {
return new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
}
return false;
}
} else {
return new XMLHttpRequest();
}
}
获取完XMLHttpRequest对象之后,下面来说下XMLHttpRequest的方法,他有很多的方法,其中最有用的是open()方法。
这个方法有三个参数:
(1)、第一个参数,用来指定讲要访问服务器上的文件。
(2)、第二个参数,用来指定访问的请求类型:GET、POST、SEND。
(3)、请求的方式是否是已异步的方式请求。
介绍完了,话不多说,上代码:
js代码:
//JS Ajax starting
function getNewContent() {
var request = getXMLHttpRequestObject();
if (request) {
request.open("GET", "upload/Leaning Method.txt", true);
request.onreadystatechange = function () {
if (request.readyState == 4) {
var para = document.createElement("p");
var txt = document.createTextNode(request.responseText);
para.appendChild(txt);
document.getElementsByTagName("body")[0].appendChild(para);
}
};
request.send(null);
} else {
alert("Sorry,your browser doesn't support XMLHttpRequest!");
}
}
//JS Ajax Ending
下面就来介绍下,这个Ajax方法中,一些相关的方法:
1、onreadystatechange---这是一个事件处理函数,它会在服务器给XMLHttpRequest对象送回响应的时候触发执行 ---服务器对客户端的响应一开始就触发
注意:在为onreadystatechange指定引用时,不要在函数后面加括号,如request.onreadystatechange()因为加括号表示立即调用该函数,而我们只想把我们自定义的函数的引用(不是函数结果)赋值给onreadystate-change属性;
2、send()---在指定了请求的目标,明确了处理完成后的响应之后,就可以用send方法来发送请求了
3、readystate---服务器在向XMLHttpRequest对象发回响应时,该对象有许多属性可以用 ---在触发onreadystatechange事件处理函数后(服务端对客户端开始响应),XMLHttpRequest对象将被赋予很多的属性和属性值下面来简单说下:
readyStates属性:浏览器会在不同阶段更新readyState属性的值,它有5个可能的值:
0表示未初始化
1表示正在加载
2表示加载完毕
3表示正在交互
4表示完成
只要readyState属性值变成了4,就可以访问服务器发送回来的数据了;
4、访问服务器发送回来的数据要通过两个属性来完成。
(1)responseText属性---这个属性用于保存文本字符串形式的数据。
(2)responseXML属性---这个属性用于保存Content-Type头部中指定位text/xml的数据,其实是一个DocumentFragment对象。你可以使用各种DOM方法来处理这个对象。而这个是真是XMLHttpRequest这个名称里有XML的原因。
下面就要说一下关于Ajax技术,新手不得不注意并且重试的几个点,这几个点我们在平时开发中会经常遇到,如果我们在不清楚知道这几个点的情况下,我们的程序很可能会遇到问题:
1、Ajax同源策略,使用XMLHttpRequest对象发送的请求只能访问与其所在的html同一个域中的数据,不能向其他域发送请求。
2、有些浏览器会限制Ajax请求使用的协议。比如在Chrome中,如果你使用file://从自己的硬盘里加载example.txt ,浏览器就会报(跨域请求只支持HTTP协议)的错误消息。
3、重点:就是异步请求有一个容易会被忽略的问题,就是异步性,就是脚本在发送XMLHttpRequest请求之后,仍然会继续执行,不会等待响应返回。如果脚本依赖于服务器的响应结果,那么就应该把脚本代码都转移到指定给onreadystatechange的那个函数中去;
JavaScript之Ajax的更多相关文章
- 最新JavaScript、Ajax典藏级学习资料下载分类汇总 (2011年12月21日更新)
其他网站开发相关资料 超强HTML和xhtml,CSS精品学习资料下载汇总 最新htm ...
- 初识JavaScript,Ajax,jQuery,并比较三者关系
一.基本认识 1.JavaScript 定义: javaScript的简写形式就是JS,是由Netscape公司开发的一种脚本语言,一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态 ...
- JavaScript实现Ajax小结
置顶文章:<纯CSS打造银色MacBook Air(完整版)> 上一篇:<TCP的三次握手和四次挥手> 作者主页:myvin 博主QQ:851399101(点击QQ和博主发起临 ...
- 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求
转http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro2/ 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求 ...
- javascript版Ajax请求
什么是Ajax请求,Ajax也就是“Asynchronous JavaScript and XML”(异步JavaScript和XML),无刷新数据读取.能减少流量的消耗,也提高了浏览的流畅性,给用户 ...
- Javascript与Ajax
不使用jquery来处理ajax请求该怎么做? 首先要明确html中的某些数据需要从服务端获得,也就是客户端向服务端请求(request)数据,服务端就响应(response)这个请求,把客户端要的数 ...
- javascript进阶——Ajax
统的Web 页面和应用中,用户每点击页面上的某个部分,浏览器就会向服务器发出一个请求,等待服务器做出响应,然后返回一个完整新网页,但在大多数情况下用户不得不忍受页面闪烁和长时间的等待.随着Web技术的 ...
- Javascript and AJAX with Yii(在yii 中使用 javascript 和ajax)
英文原文:http://www.yiiframework.com/wiki/394/javascript-and-ajax-with-yii /*** http://www.yiiframework. ...
- javascript实现ajax
什么是 ajax ajax 即“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML),也就是无刷新数据读取. http 请求 首先需要了解 htt ...
- JavaScript和ajax 跨域的案例
今天突然想看下JavaScript和ajax 跨域问题,然后百度看了一下,写一个demo出来 <!DOCTYPE html> <html xmlns="http://www ...
随机推荐
- 【每天一个Linux命令】14. Linux中locate命令的用法
命令用途 locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案. 其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了. ...
- 使用SuperWebSocket 构建实时 Web 应用
Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不是特别频繁的应用尚能相安无事, ...
- There is no result type defined for type 'json' mapped with name 'success'. Did you mean 'json'?
错误信息: 严重: Exception starting filter struts2 Unable to load configuration. - action - file:/C:/Users/ ...
- zen-Coding的使用
zen-Coding的使用 zen-Coding的使用需要掌握CSS和HTML相关知识.其实只要对CSS的选择器比较熟悉,就可以得用简短的类似于CSS选择器的代码高效的编写出HTML代码.打开Note ...
- 内存管理之二——Cocos2d-x学习历程(六)
1.工厂方法 工厂方法是程序设计中一个经典的设计模式,指的是基类中只定义创建对象的接口,将实际的实现推迟到子类中. CCObject* factoryMethod() { CCObject* ret ...
- python heapq
这个模块(build-in)实现了一个堆的数据结构,完美的解决了Top-K问题,以后解决Top-K问题的时候,直接把这个模块拿来用就可以了 注意,默认的heap是一个小顶堆! heapq模块提供了如下 ...
- mysql utf8_bin跟utf8_general_ci的区别
ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的; bin 是二进制, a 和 A 会别区别对待. 例如你运行: SEL ...
- [转载]CTreeCtrl 和 CListCtrl 控件(VC_MFC)
来源:http://www.cnblogs.com/kzloser/archive/2012/11/23/2783305.html Tree Control 控件(MSDN 链接) 说明: 树形控件是 ...
- javaEE简答题整理
1. 什么是JavaEE?其编程思想是什么? JavaEE是一个标准的中间件体系结构,是企业分布式应用开发标准.JavaEE的编程思想是组件—容器. 2. 为什么提出JavaEE体系结构? (1)为满 ...
- python初学笔记(二)
注释: 任何时候,我们都可以给程序加上注释.注释是用来说明代码的,给自己或别人看,而程序运行的时候,Python解释器会直接忽略掉注释,所以,有没有注释不影响程序的执行结果,但是影响到别人能不能看懂你 ...