什么是Ajax+Ajax底层原理+如何使用原生JavaScript或JQuery发送Ajax请求

1、什么是Ajax?

Ajax(Asynchronous JavaScript and XML)并不是一种全新的技术,而是有JavaScript、XML、CSS等几种现有技术整合而成。它以异步的方式在客户端与服务器端之间传递数据,也是一种局部刷新技术。

2、原生JavaScript实现Ajax请求

1、认识XMLHttpRequest对象

方法名称说明
open(String method,String url,boolean async,String user,String password)用于创建一个新的HTTP请求 参数
method:设置HTTP的请求方法,对大小写不敏感
url:请求的URL地址
async:可选,指定该请求是否为异步方法,默认为true
user:可选,如果服务器需要验证,此处需要指定用户名;否则,会弹出验证窗口
password:可选,验证信息中的密码,如果用户名为空,则此处将被忽略
send(String data)发送请求到服务器端
参数data:字符串类型,表示通过此请求发送的数据。此参数取决于open方法中的method参数。如果method参数为“POST”,可以指定该参数。如果为“GET”,该参数为null
abort()取消当前请求
setRequestHander(String hander,String value)单独设置请求的某个HTTP头信息
参数hander:需要指定的头名称
value:要指定的头名称的值
getResponseHander(String hander)从响应中获取指定的HTTP头信息
参数hander:要获取的指定HTTP头
getAllResponseHander()获取响应的所有HTTP头信息
属性名称说明
onreadystatechange设置回调函数
readyState返回请求的当前状态,常用值:
0:未初始化
1:开始发送请求
2:请求发送完成
3:开始读取响应
4:读取响应结束
status返回当前请求的HTTP状态码,常用值:
200:正确返回
404:找不到访问对象
statusText返回当前请求的响应行状态
responseText以文本的形式获取响应值
responseXML以XML的形式获取响应值,并且解析成DOM对象返回

2、发送Ajax GET请求并处理响应

例如:当我们使用文本框onBlur事件实现当文本框失去焦点的时候发送Ajax异步请求检查用户名是否存在
实现步骤
1、 创建XMLHttpRequest对象。可以通过window.XMLHttpRequest的返回值判断创建XMLHttpRequest对象的方式(也就是解决浏览器的兼容问题)
2、 设置回调函数。回调函数需要自己定义
3、 初始化XMLHttpRequest对象。通过open()方法设置请求路径和请求方式
4、 发送请求

//创建XMLHttpRequest对象
if(window.XMLHttpRequest){
	xmlHttpRequest = new XMLHttpRequest();
}else{
	xmlHttpRequest = new ActiveXObjec("Microsoft.XMLHTTP");
}

//设置回调函数
xmlHttpRequest.onreadystatechange=callBack;

//初始化XMLHttpRequest对象。通过open()方法设置请求路径和请求方式
var url = "userServlet?name="+name;//服务器端URL地址。name为从文本框中获取
xmlHttpRequest.open("GET",url,true);

//发送请求
xmlHttpRequest.send(null);//如果send()方法不设置参数值,在不同浏览器下可能存在兼容性问题
function callBack(){
	if(xmlHttpRequest.readyState==4&&xmlHttpRequest.status==200){
		var data = xmlHttpRequest.responseText;
		if(data=="true"){
			$("#nameDiv").html("用户名已被使用!");
		}else{
			$("nameDiv").html("用户名可以使用!")}
	}
}

执行检查功能的servlet代码如下:

public class UserServlet extends HttpServlet{
	public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
		String name = request.getParameter("name");
		boolean used = false;
		if("ajax".equals(name)){
			used=true;
		}else{
			used=false;
		}
		response.setContentType("text/html","utf-8");
		PrintWriter out = response.getWriter();
		out.print(used);
		out.flush();
		out.close();
	}
	public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
		request.setCharacterEncoding("utf-8");
		this.doGet(request,response);
	}
}

3、发送POST Ajax请求并处理响应

//创建XMLHttpRequest对象
if(window.XMLHttpRequest){
	xmlHttpRequest = new XMLHttpRequest();
}else{
	xmlHttpRequest = new ActiveXObjec("Microsoft.XMLHTTP");
}

//设置回调函数
xmlHttpRequest.onreadystatechange=callBack;

//初始化XMLHttpRequest对象。通过open()方法设置请求路径和请求方式
var url = "userServlet";//服务器端URL地址
xmlHttpRequest.open("POST",url,true);
xmlHttpRequest.setRequestHander("Content-type","application/x-www-form-urlencoded");//这里为固定写法

//发送请求
var data = "name"+name;//多个键值对使用&连接
xmlHttpRequest.send(data);//如果send()方法不设置参数值,在不同浏览器下可能存在兼容性问题
function callBack(){
	if(xmlHttpRequest.readyState==4&&xmlHttpRequest.status==200){
		var data = xmlHttpRequest.responseText;
		if(data=="true"){
			$("#nameDiv").html("用户名已被使用!");
		}else{
			$("nameDiv").html("用户名可以使用!");
		}
	}
}

3、使用jQuery发送Ajax 请求

参数类型说明
urlString发送请求的地址
typeString数据请求的方式,post 或者 get,默认是get,1.9.0版本之后可以使用method代替type
dataPlainObject或String或Array发送到服务器的数据,如果不是字符串则自动转换为字符串格式,如果是get请求方式,那么,该字符串将附在url的后面
dataTypeString服务器返回的数据类型,如果没有指定,那么jquery将自动根据HTTP包的MIME的信息自动的判断。服务器返回的数据自动根据自动判断的结果进行解析,传递给回调函数
其可用类型为:
html:返回纯文本的HTML信息, 包含的Script标记会在插入页面时被执行。
script:返回纯文本的javaScript代码
text:返回纯文本字符串
xml:返回可被jQuery处理的xml文档
json: 发挥json格式的数据
beforeSendFunction(jqXHR jqxhr,PlainObject settings)发送请求前调用的函数,可用于设置请求头等,返回false将终止请求
参数 jqxhr:可选,jqXHR是XMLHttpRequest的超集
参数 settings:可选,当前ajax()方法的settings对象
successFunction(任意对象 result,String textStatus,jqXHR jqxhr)请求成功后调用的回调函数
result: 可选,表示由服务器返回的数据
textStatus: 可选,表示描述请求状态的字符串
jqxhr: 可选
errorFunction(jqXHR jqxhr, String textStatus, String errorThrown)请求失败后调用的回调函数
jqxhr: 可选
textStatus: 可选,描述错误信息
errorThrown: 可选,表示用文本描述的HTTP状态
completeFunction(jqXHR jqxhr,String textStatus)请求完成后调用的回调函数
jqxhr: 可选
textStatus: 可选,描述请求状态的字符串
timeoutNumber请求超时的时间
globalBoolean是否响应全局事件,默认为true
asyncBoolean是否为异步请求,默认为true
cacheBoolean是否进行页面缓存,默认为true

$.ajax({
	"url" : "userServlet",
	"type":"GET",
	"data":"name"+name,
	"dataType":"text",
	"success":callBack,
	"error":function(){
		alert("用户名验证错误!!!");
	}
});

//响应成功时的回调函数
function callBack(data){  //传入参数data表示响应结果
	if(data == "true"){
		$("#nameDiv").html("用户名已被使用!");
	}else{
		$("nameDiv").html("用户名可以使用!");
	}
}

#{}与${}的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值