Cheug's Blog

当前位置:网站首页 / javascript / 正文

Ajax

2019-07-17 / javascript / 996 次围观 / 0 次吐槽 /

ajax简介

    Ø AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

    Ø AJAX = 异步 JavaScript XML

    同步:

    异步:

    Ø AJAX 是一种用于创建快速动态网页的技术。

    Ø 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

    Ø 传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。

    Ø 有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。

    Ø 演示:搜索引擎就是通过ajax来实现的

XMLHttpRequest对象

        Ø XMLHttpRequest  AJAX 的基础,所有现代浏览器均支持 XMLHttpRequest 对象(IE5 IE6 使用 ActiveXObject)。

        Ø 所有现代浏览器(IE7+FirefoxChromeSafari 以及 Opera)均内建 XMLHttpRequest 对象。

        Ø XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

XMLHttpRequest使用流程

        Ø 创建XMLHttpRequest对象

        Ø 请求(同步或者异步请求)

        Ø 响应

Requestopen方法

        image.png

        Ø 注意:默认方法是异步的,也就是开子线程,同步方法已经被废弃,不能再用

ajax准备状态码

              request.readyState
    0: 请求未初始化

              1: 服务器连接已建立  

              2: 请求已接收
    3: 请求处理中
  

              4: 请求已完成,且响应已就绪

http响应状态

            request.status

            200: "OK"

            404: 未找到页面

            405:用来访问本页面的 HTTP 谓词不被允许(方法不被允许) ,也就是post不能请求get方法

获取响应数据

    request.responseText

AJAX登录的get案例

<script type="text/javascript">
	//ajax登陆
	function login() {
		//获取登陆信息
		var username = document.getElementById('username').value;
		var password = document.getElementById('password').value;
		//拼接登陆
		var params = 'username=' + username + "&password=" + password;
		var url = '${pageContext.request.contextPath}/loginServlet?' + params;
		console.log(url);
		//创建一个请求对象
		var request = new XMLHttpRequest();
		//发送get请求
		request.open("get",url,true);
		request.send();
		//接受返回数据
		request.onreadystatechange = function(){
			console.log("准备状态码:" + request.readyState + ": 响应状态码:" + request.status);
			if(request.readyState == 4 && request.status == 200){
				var respText = request.responseText;
				console.log("登录状态:" + respText);
				var tipTag = document.getElementById("tip");
				if(respText == "Success"){
					tipTag.innerHTML = "登陆成功";	
				}else{
					tipTag.innerHTML = "登陆失败";	
				}
			}
		}
	}
</script>

AJAX登录的post案例

<script type="text/javascript">
	//ajax登陆
	function login() {
		//获取登陆信息
		var username = document.getElementById('username').value;
		var password = document.getElementById('password').value;
		//拼接登陆
		var params = 'username=' + username + "&password=" + password;
		var url = '${pageContext.request.contextPath}/loginServlet';
		console.log(url);
		//创建一个请求对象
		var request = new XMLHttpRequest();
		//发送post请求
		request.open("post",url,true);
		request.setRequestHeader("content-type","application/x-www-form-urlencoded");//设置请求头
		request.send(params);//带参数提交
		//接受返回数据
		request.onreadystatechange = function(){
			console.log("准备状态码:" + request.readyState + ": 响应状态码:" + request.status);
			if(request.readyState == 4 && request.status == 200){
				var respText = request.responseText;
				console.log("登录状态:" + respText);
				var tipTag = document.getElementById("tip");
				if(respText == "Success"){
					tipTag.innerHTML = "登陆成功";	
				}else{
					tipTag.innerHTML = "登陆失败";	
				}
			}
		}
	}
</script>

ajax处理json数据

<script type="text/javascript">
	//ajax登陆
	function login() {
		//获取登陆信息
		var username = document.getElementById('username').value;
		var password = document.getElementById('password').value;
		//拼接登陆
		var params = 'username=' + username + "&password=" + password;
		params = encodeURI(params);//中文编码
		var url = '${pageContext.request.contextPath}/loginJsonServlet?' + params;
		console.log(url);
		//创建一个请求对象
		var request = new XMLHttpRequest();
		
		//接受返回数据
		request.onreadystatechange = function(){
			console.log("准备状态码:" + request.readyState + ": 响应状态码:" + request.status);
			if(request.readyState == 4 && request.status == 200){
				var respText = request.responseText;
				console.log("登录状态:" + respText);
				
				var json = JSON.parse(respText);
				
				var tipTag = document.getElementById("tip");
				if(json.success == 1){
					tipTag.innerHTML = "登陆成功";	
				}else{
					tipTag.innerHTML = json.errMsg;	
				}
			}
		}
		
		//发送get请求
		request.open("get",url,true);
		request.send();
		
	}
</script>

get 请求中文处理

   get请求的url后面参数不能传中文,应该对参数进行编码;

Ø url编码是什么

URL编码遵循下列规则: 每对name/value&;符分开;每对来自表单的name/value=符分开。如果用 解码软件 解码软件 户没有输入值给这个name,那么这个name还是出现,只是无值。任何特殊的字符(就是那些不是简单的七位ASCII,如汉字)将以百分符%用十六进制编码,当然也包括象 =,&;,和 % 这些特殊的字符。其实url编码就是一个字符ascii码的十六进制。

 

Ø js提供的url编码和解码

encodeURIComponent 编码与decodeURIComponent 解码

encodeURIdecodeURIL

encodeURI()encodeURIComponent()区别

两者的区别在于,encodeURI函数不会对以下的字符进行处理: “! @ # $ & * ( ) = : / ; ? + '

推荐使用encodeURIComponent()

默认情况下ajax,浏览器会对url进行编码

ajax的兼容性问题

var request;
if (window.XMLHttpRequest){
    //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
    request=new XMLHttpRequest();
}else{
    // IE6, IE5 浏览器执行代码
    request=new ActiveXObject("Microsoft.XMLHTTP");
}


Powered By Cheug's Blog

Copyright Cheug Rights Reserved.