AJAX简单介绍

一、简介

AJAX 即 “Asynchronous JavaScript and XML ”( 异步 JavaScript 和 XML) ,AJAX 并非缩写词 , 而是由 Jesse James Gaiiett 创造的名词 , 是指一种创建交互式 网页 应用的网页开发技术。

二、同步和异步的区别

同步 :提交请求 -> 等待服务器处理 -> 处理完毕返回这个期间客户端浏览器不能干任何事

同步是指:发送方发出数据后,等接收方发回响应以后才发下一数据包的通讯方式。


异步 : 请求通过事件触发 -> 服务器处理(这时浏览器仍然可以作其他        事情) -> 处理完毕
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数     据包的通讯方式

三、AJAX原理

1. Ajax 的核心是 JavaScript 对象 XmlHttpRequest

2. AJAX 采用异步交互过程

 AJAX 引擎允许用户与应用软件之间的交互过程异步进行,独立于用户与网络服务器间的交流。现在,可以用Javascript 调用 AJAX 引擎来代替产生一个 HTTP 的用户动作,内存中的数据编辑、页面导航、数据校验这些不需要重新载入整个页面的需求可以交给 AJAX 来执行

3.XMLHttpRequest 对象

创建 XMLHttpRequest 对象(由于非标准所以实现方法不统一)

(1)Internet Explorer 把 XMLHttpRequest 实现为一个 ActiveX 对象

(2) 其他浏器 (Firefox 、 Safari 、 Opera …) 把它实现为一个本地JavaScript 对象。、(3)XMLHttpRequest 在不同浏览器上的实现是兼容的,所以可以用同样的方式访问 XMLHttpRequest 实例的属性和方法,而不论这个实例创建的方法是什么。

var xmlhttp = null;
	var url = "/cgi-bin/_cgi2.cgi?";
	url += sendData;

	if (window.XMLHttpRequest)
	{// code for IE7+, Firefox, Chrome, Opera, Safari
		xmlhttp=new XMLHttpRequest();
	}
	else
	{// code for IE6, IE5
		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}


4.XMLHttpRequest 对象方法

方法
描述
abort()
停止当前请求
getAllResponseHeaders()
把 http 请求的所有响应首部作为键 / 值对返回
getResponseHeader("headerLabel")
返回指定首部的串值
open(method,url,async)
规定请求的类型、 URL 以及是否异步处理请求。

method : 请求的类型; GET 或 POST

url : 文件在服务器上的位置

async :true ( 异步)或 false(同步)
send(content)
向服务器发送请求
setRequestHeader("label", "value")
把指定首部设置为所提供的值。在设置任何首部之前必须先调用 open()

5.XMLHttpRequest 对象属性

属性

描述

onreadystatechange

存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数

readyState

存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

0: 请求未初始化

1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪

status

200: "OK"   404: 未找到页面

responseText

获得字符串形式的响应数据。

responseXML

获得 XML 形式的响应数据


四、发送请求方法与属性的介绍

利用 XMLHttpRequest 实例与服务器进行通信包含以下 3 个关键部分

onreadystatechange 事件处理函数、 open 方法和 send 方法

(1) .onreadystatechange= funtion()该事件处理函数由服务器触发,而不是用户

在 Ajax 执行过程中,服务器会通知客户端当前的通信状态。这依靠更新 XMLHttpRequest 对象的readyState 来实现 , 改变 readyState属性是服务器对客户端连接操作的一种方式。

注意:每次 readyState 属性的改变都会触发 readystatechange 事件
(3).send(data)

open 方法定义了 Ajax 请求的一些细节。 send 方法可为已经待命的请求发送指令

data :将要传递给服务器的字符串。

若选用的是 GET 请求 , 则不会发送任何数据 , 给 send 方法传递 null 即可 :xmlhttp.send(null)

当向 send() 方法提供参数时,要确保 open() 中指定的方法是 POST ,如果没有数据作为请求体的一部分发送,则使用 null.

该方法必须在 open() 之后才能调用

(5) 发送请求get 与post 的区别总结

发送请求 : 如果是get 请求send( 参数) 参数:必须是null 或者xmlhttp.send();

get 请求就不必要设置 xhr.setRequestHeader(header,value)

备注:如果xhr.send( 参数); 参数不为空情况下, 会自动转换成post 请求方式 您可以通过request.getMethod(); 方法获取请求的方式

发送请求 : 如果是post 请求send( 参数) 参数:参数可以是null 或     者xhr.send()|send( 带有参数的)post 请求在传递值的情况下必须       设置 xhr.setRequestHeader(header,value)

(2) .open(method, url, asynch)

method : 请求类型,类似 “ GET ” 或” POST ” 的字符串。若只想从服务器检索一个文件,而不需要发送任何数据,使用 GET( 可以在 GET 请求里通过附加在 URL 上的查询字符串来发送数据,不过数据大小限制为 2000 个字符 ) 。若需要向服务器发送数据,用 POST 。

url : 路径字符串,指向你所请求的服务器上的那个文件。可以是绝对路径或相对路径。

asynch : 表示请求是否要异步传输,默认值为 true( 异步 ) 。指定 true ,在读取后面的脚本之前,不需要等待服务器的相应。指定 false ,当脚本处理过程经过这点时,会停下来,一直等到 Ajax 请求执行完毕再继续执行。

在某些情况下,有些浏览器会把多个 XMLHttpRequest 请求的结果缓存在同一个 URL 。如果对每个请求的响应不同,这就会带来不好的结果。把当前时间戳追加到 URL 的最后,就能确保 URL 的惟一性,从而避免浏览器缓存结果 。

(4).setRequestHeader(header,value)

参数 header : 首部的名字

参数 value : 首部的值

如果用 POST 请求向服务器发送数据 , 需要将 “Content-type ” 的首部设置为 “application/x-www-form-urlencoded ” 它会告知服务器正在发送数据 , 并且数据已经符合 URL 编码了。

五、实例 

1.get方法
function xmlhttpfun()
{
	var xmlhttp = null;
	if (window.XMLHttpRequest)
	{// code for IE7+, Firefox, Chrome, Opera, Safari
		xmlhttp=new XMLHttpRequest();
	}
	else
	{// code for IE6, IE5
		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}

	
	xmlhttp.onreadystatechange=function()
	{
		if(xmlhttp.readyState==4 && xmlhttp.status==200)
		{
			document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
		}
	}
	
	/* 	建立对服务器的请求
		GET: 通过"GET"方法,还有"POST"
		ajax_demo.txt: url路径,相对路径或者绝对路径
		true,异步;false,同步
	 */
	xmlhttp.open("GET", "ajax_demo.txt", true);
	xmlhttp.setRequestHeader("If-Modified-Since", "0");//
	xmlhttp.send(); // 向服务器发送请求,先open(),才能再调用send();

}



  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值