JavaScript之Ajax之美~

  JavaScript之Ajax之美~

  曾经有一段时期,因为开发人员对JavaScript的滥用导致其遭受了一段时间的冷门时期,不被大家看好,后来,到了2005年,Google公司的很多技术都是用了ajax之后,JavaScript才又火热了起来,可以说,是Ajax拯救了JavaScript,就目前来说,熟练使用Ajax已经成为了所有web开发人员必须掌握的技能。那么Ajax又是什么呢? 它的作用是什么呢?

第一部分:Ajax简介

  Ajax即Asynchronous JavaScript +XML的简写,这一技术能够向服务器请求额外的数据而无需卸载页面,会带来更好地用户体验。Ajax的核心是XMLHttpRequest对象(简称XHR,这一对象受到chrome、safari、FF、opera等主流浏览器的支持),这是由微软首先引入的一个特性,IE 浏览器使用 ActiveXObject,后来浏览器提供商都提供了相同的实现。XHR对象的存在,意味着当用户点击之后,不必刷新页面也可以从后台取得新数据,也就是说,可以试用XHR对象取得新数据,然后通过DOM方式将新数据插入到页面中,达到对网页的某部分进行更新的效果。值得注意的是:虽然,Ajax中包含了xml,但是我们在无需刷新页面就得到的数据不一定是xml数据。

第二部分:XHR对象的创建

  上面讲到,Ajax的核心是XMLHttpRequest对象,那么我们如何创建一个XMLHttpRequest对象呢?

  首先,我们应当知道:所有浏览器都支持XMLHttpRequest对象,其中IE5和IE6使用ActiveXObject对象。并且现在所有浏览器(IE7+、FireFox、Chrome、Safari以及Opera)均内建了XMLHttpRequest对象。于是创建XMLHttpRequest对象的语法是:

var xhr = new XMLHttpRequest();

 

  刚刚提到老版本的Internet Explorer(IE5和IE6)使用的是ActiveXObject对象,所以语法是:

var axo = new ActiveXObject("Microsoft.XMLHTTP");

  注意:其中传入的“Microsoft.XMLHTTP”是不能改变的。

  于是,为了应对所有的现代浏览器(包括IE5和IE6),请首先检查是否支持XMLHttpRequest对象:如果支持,则创建XMLHttpRequest对象;如果不支持,则创建ActiveXObject对象:

var xmlHttp=null;
if(window.XMLHttpRequest)
{
    xmlHttp=new XMLHttpRequest();
}
else
{
    xlmHttp=new ActiveXObject("Microsoft.XMLHTTP");
}

  关于这个应对所有现代浏览器的代码应当注意:

  • 我将xmlHttp的值设置为null,是因为null值表示一个空对象指针,而这也正是使用typeof操作符检测null值是会返回“object”的原因,因此:如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。
  • 之所以可以试用window.XMLHttpRequest来检测其是否存在,是因为XMLHttpRequest是window对象的属性。

第三部分:XHR对象的用法(属性与方法等)

  上面两部分,我们介绍XHR对象是什么以及怎么创建,这一部分我将谈一谈XHR对象的用法。

  ⑴.open()方法

  既然XHR是一个对象,那么它就一定有自己的属性和方法。在使用XHR对象时,要调用的第一个方法是open()。它接受3个参数:

  1. 要发送的请求的类型:get、post、put、delete等等。
  2. 请求的URL(这个URL既可以是绝对路径,也可以是相对路径)。
  3. 是否异步发送请求的布尔值:true表示异步发送请求,false表示同步发送请求。

   举例如下:

xhr.open("get","example.php",true);

  此时,这段代码会启动一个针对example.php的GET请求。注意:open()方法并不会真正的发送请求而只是启动一个请求以备发送。那么怎么才能发送特定的请求呢,这是就要用到send()方法了。

  

  ⑵.send()方法

  刚刚说到open()方法,只是开启(open),还没有发送,而send才是真正地发送。它接受一个参数:

  • 作为请求主体发送的数据

  注意:如果不需要通过请求主体发送数据,则必须传入null。一般get请求不需要传入参数,而对于post请求,如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据。这一部分会详细介绍,下面举一个简单例子:

xhr.open("get","example.php",true);
xhr.send(null);

  

  (3).XHR对象的几个属性

  通过send()发送之后,会接受到响应,响应的数据会自动填充XHR对象的属性。主要有以下几种:

  • responseText:作为响应主体被返回的文本
  • responseXML:如果响应的内容类型是"text/xml"或"application/xml",这个属性中将保存包含着相应数据的XML DOM文档。
  • status:响应的http状态
  • statusText:Http状态的说明

  在接收到响应后,一般是先检查status属性,来确定响应是否成功返回,一般状态代码200表示成功(以2开头即表示成功),这是responseText就可以被访问了。而状态代码为304表示请求的资源并没有被修改,可以直接使用浏览器中缓存的版本,因此这种响应也是有效的。于是可以通过下面的代码检测这两种状态:

	xhr.open("get","example.php",false);
	xhr.send(null);
	if((xhr.status>=200&&xhr.status<300)||xhr.status==304){
		alert(xhr.responseText);
	}else{
		alert("Request waw unseccessful:"+"xhr.status");
	}

  

  XHR对象的readystate属性

  使用Ajax我们当然还是希望发送异步请求的:如果发送同步请求,那么一旦网卡住了,这个页面就不会有任何反应而是继续等待响应,但是发送异步请求,即使网卡住,也不用担心,因为它是异步的。而readystate属性可以检测到请求/响应过程的当前活动阶段。它有5个取值,分别如下:

  

  关键:只要readystate的值改变(比如从0变为1,从1变为2等等),那么每次地改变都会触发readystatechange事件。并且可以通过这个时间检测每次状态变化后的readystate的值。当值为4是最重要的,因为这事所有的数据已经准备就绪。看一个例子:

	var xhr=new XMLHttpRequest();
	xhr.open("get","example.php",false);
	xhr.onreadystatechange=function(){
		if(readystate==4){
			if((xhr.status>=200&&xhr.status<300)||xhr.status==304){
				alert(xhr.responseText);
			}else{
				alert("Request waw unseccessful:"+"xhr.status");
			}
		}
	};
	xhr.send(null);

   注意以下几点:

  • xhr.onreadystatechange前面有一个on,这是因为我们使用的是DOM0级方法为XHR对象添加了时间处理程序,没有利用addEventListener这种DOM2级方法,是因为并非所有的浏览器都支持DOM2级方法
  • 这个例子中我们没有使用this对象,是因为onreadystatechange时间处理程序的作用域问题。如果使用this对象,在有的浏览器中会导致函数执行失败或者导致发生错误。因此,使用实际的XHR对象实例便利那个是一种较为可靠的方式。

  (4).abort()方法

  在接受到响应之前,我们还可以使用abort()方法来取消异步请求,如下所示:

xhr.abort();

  在调用了这个方法之后,XHR对象会停止触发事件,而且也不再允许访问任何与响应有关的对象属性。

第四部分:HTTP头部信息

  因为使用Ajax和后台交互,那么就一定离不开http协议了。而HTTP请求和响应都会带有相应的头部信息。

  在默认情况下,在发送XHR请求的同时,还会发送以下头部信息。

  • Accept:浏览器能够处理的内容类型
  • Accept-Charset:浏览器能够显示的字符集
  • Accept-Encodding:浏览器能够处理的压缩编码
  • Accept-Language:浏览器当前设置的语言
  • Connection:浏览器与服务器之间链接的类型
  • Cookie:当前页面设置的任何Cookie
  • Host:发出请求的页面所在的域
  • Referer:发出请求页面的URI
  • User-Agent:浏览器的用户代理字符串

  下面这张图片是我的chrome浏览器开发者工具下的network中截屏所得,大家可以对照参考:

 

时间: 2024-08-01 14:58:35

JavaScript之Ajax之美~的相关文章

【javascript】ajax 基础 --本文转载

[javascript]ajax 基础 什么是 ajax ajax 即"Asynchronous JavaScript and XML"(异步 JavaScript 和 XML),也就是无刷新数据读取. http 请求 首先需要了解 http 请求的方法(GET 和 POST). GET 用于获取数据.GET 是在 URL 中传递数据,它的安全性低,容量低. POST 用于上传数据.POST 安全性一般,容量几乎无限. ajax 请求 ajax 请求一般分成 4 个步骤. 1.创建 a

原生JavaScript 封装ajax

原生JavaScript 封装ajax   function myajax(options){ //新建一个局部对象 用来存放用户输入的各种参数 var opt={ type:options.type||"get",//获取用户输入的传输方法,可选,不写为get data:options.data||"",//获取用户输入的数据 dataType:options.dataType||"",//获取用户输入的数据类型比如json 或者xml url

Javascript与Ajax

不使用jquery来处理ajax请求该怎么做? 首先要明确html中的某些数据需要从服务端获得,也就是客户端向服务端请求(request)数据,服务端就响应(response)这个请求,把客户端要的数据给它.服务端返回的数据格式多样,即可以是字符串,也可以是数字,也可以是对象.客户端接到这些数据后按自己的需要处理后显示在Html页面上.这个处理工作就交给Javascript来做.  Javascript处理Ajax异步请求要注意三点: 1.创建一个新的XMLHttpRequest对象; 2.创建

利用CSS、JavaScript及Ajax实现图片预加载的三大方法

原文:3 Ways to Preload Images with CSS, JavaScript, or Ajax 译文:利用CSS.JavaScript及Ajax实现图片预加载的三大方法 预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布,也可帮助用户在浏览你网站内容时获得更好的用户体验.本文将分享三个不同的预加载技术,来增强网站的性能与可用性.

wordpress——在插件后台管理页面中添加javascript和ajax

最近在开发一个wordpress插件,需要在插件的后台管理页面上,添加自己写的javascript文件,以达到一些功能. 查了好几天的文档和资料,终于实现了. 这里先介绍下wordpress后台页面添加javascript的过程,再介绍添加ajax的过程. 添加javascript 首先我们需要知道wordpress插件开发的框架,然后再介绍javascript添加的步骤. 添加插件设置页面 开发插件,总需要在管理后台添加自己的插件设置页面.插件设置子页面,在这些页面中,可以设置和保存插件的一些

JavaScript和ajax 跨域的案例

今天突然想看下JavaScript和ajax 跨域问题,然后百度看了一下,写一个demo出来 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <tit

JavaScript基础---AJAX

内容提纲: 1.XMLHttpRequest 2.GET与POST 3.封装Ajax  发文不易,转载请注明链接出处,谢谢! 2005年Jesse James Garrett发表了一篇文章,标题为:"Ajax:A new Approach to Web Applications".他在这篇文章里介绍了一种技术,用他的话说,就叫:Ajax,是Asynchronous JavaScript + XML的简写.这种技术能够想服务器请求额外的数据而无须卸载页面(即刷新),会带来更好的用户体验.

jQuery与JavaScript与ajax三者的区别与联系

简单总结: 1.JS是一门前端语言. 2.Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新. 3.jQuery是一个框架,它对JS进行了封装,使其更方便使用.jQuery使得JS与Ajax的使用更方便 关系比喻: 若把js比作木头,那么jquery就是木板(半成品) jQuery与ajax都是js的一个框架,各有各的功能,若js是父亲的话,jquery与ajax就是两个儿子 详细情况: 1.javascript是一种在客户端执行的脚本语

JavaScript的ajax与jQuery的ajax案例分析

先谈JavaScript的ajax,传输数据为json #############################################JavaScript ajax json########################################### 注意:由于要用到json的JSON.stringify()方法,需要引入json2.js库. html代码: <!DOCTYPE html><html lang="en"><head&g