原生Ajax 异步请求

使用XMLHttpRequest对象实现异步请求一般需要以下几个步骤

  1. 定义XMLHttpRequest对象
  2. 注册onreadystatechange时间处理函数,准备接收响应数据,并进行处理
  3. 调用XMLHttpRequest对象的open()方法打开服务端URL地址
  4. 调用XMLHttpRequest对象的send()方法发送请求

1.定义XMLHttpRequest对象

var ajax;
	if(window.XMLHttpRequest){			//firefox 
           ajax=new XMLHttpRequest(); 
    }else if(window.ActiveXObiect){		//IE 
           ajax=new ActiveXObject("Msxml2.XMLHTTP"); 
    } 

2.注册onreadystatechange时间处理函数,准备接收响应数据,并进行处理

	// 可以在这里进行返回数据的请求
	ajax.onreadystatechange = function() {
		if(ajax.readyState == 4 && ajax.status == 200) {
				// 可以通过通过ajax.responseText和ajax.responseXML来获取返回的数据
				var info = ajax.responseText;
				alert(info);
		}
	}

3.调用XMLHttpRequest对象的open()方法打开服务端URL地址

XMLHttpRequest.open(method, url, async, user, password);
五个参数只有前面两个参数是必须的
method:HTTP方法字符串,如post、get等 大小写不敏感
url:请求URL的地址字符串
async:布尔值,指定是否为异步请求方式。默认为true表示异步请求
user:如果服务器需要验证,该参数指定用户名
password:如果服务器需要验证,该参数指定密码

ajax.open("get", "user?id=1",true);

4.调用XMLHttpRequest对象的send()方法发送请求

  ajax.send(null); 

5.ajax的readyState属性和状态码ajax的readyState属性和状态码

6.对 onreadystatechange 属性的理解

http://www.runoob.com/w3cnote/onreadystatechange-attribute-learn.html

我的理解是每当readystate参数改变是,就回去去调用onreadystatechange 处理函数。

7.获取数据

7.1 获取XML数据
ajax.onreadystatechange = function() {
		if(ajax.readyState == 4 && ajax.status == 200) {
			// 可以通过通过ajax.responseText和ajax.responseXML来获取返回的数据
			var info = ajax.responseXML;
			alert(info.getElementsByTagName("name")[0].firstChild.data);
		}
	}
7.2 获取JSON数据
ajax.onreadystatechange = function() {
	if(ajax.readyState == 4 && ajax.status == 200) {
		// 获取JSON 数据
		var info = ajax.responseText;
		// 通过eval方法将JSON字符串转换为JS对象
		var o = eval("("+info+")");
		// 或者使用
		eval("var oo="+info); //也可以将json字符串转换为js对象
	}
}

为什么eval方法需要使用("("+info+")")

原因在于:eval 本身的问题。 由于 json 是以 {} 的方式来开始以及结束的,在 js中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。 加上圆括号的目的是迫使 eval 函数在处理 JavaScript
代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量 {},如若不加外层的括号,那么 eval 会将大括号识别为j avascript 代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。

8.Ajax中的get请求和post请求的区别。

1.在发送get请求时,只需要将包含查询字符串的URL传入open()方法,设置第一个参数值为get即可。服务器能够在URL尾部的查询字符串中接收用户传递过来的信息。

// 查询字符串是指接在?后面的数据
ajax.open("get", "user?id=1",true);

2.post请求支持发送格式、任意长度的数据,一般用于表单提交。post发送的数据必须进行编码

   ajax.open("post", "user",true);
    // 设置请求头
    ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    // 使用send方法发送数据
    ajax.send("name=zhiyuan&age=22");

3.get和post区别

  1. get请求参数在url中显示,post请求不会在url中显示
  2. 使用get请求发送数据量小(是由于浏览器地址栏的限制),post请求发送数据量大
  3. post请求必须设置Content-Type值为application/x-form-www-urlencoded,且参数通过send()方法发送。get请求参数实在url中进行发送的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值