AJAX的基本知识

一、AJAX是什么?
AJAX = Asynchronous JavaScript and XML(异步的JavaScript和 XML)。
AJAX不是新的编程语言,它是一种使用现有标准的新方法,是一种用于创建快速动态网页的技术;通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新,也就意味着AJAX是一种在无需重新加载网页的情况下,能够更新部分网页的技术。
(每当用户向服务器端发出请求时,尽管只需要简单的更新一点点局部内容,但是服务端都会将一整个页面进行刷新,并重新生成代码,这样一来程序的性能肯定会有所降低,而如果用了AJAX技术之后,就可以实现局部的变更,而不用进行整体的页面刷新,显然处理的性能要好的多)。
简而言之,AJAX主要用于页面的局部刷新,某一局部的修改,某一局部进行服务器的请求和响应。

二、作用是什么?
AJAX是用来与后台交互的,因此它的作用是为了提高用户体验,来减少网络数据的传输量。

三、Ajax的实现流程是怎样的?
(1)创建XMLHttpRequest对象,也就是创建一个异步调用对象
(2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及传输的信息
(3)设置响应HTTP请求状态变化的函数
(4)发送HTTP请求
(5)获取异步调用返回的数据
(6)使用JavaScript和DOM实现局部刷新

AJAX的操作核心是XMLHttpRequest,核心对象是xmlHttp
XMLHttpRequest对象:
在AJAX中主要是通过XMLHttpRequest对象处理方式异步请求和处理回应的,此对象最早是在IE5中以ActiveX组件的形式出现的,直到2005年才被广泛使用。要想创建一个XMLHttpRequest对象必须使用JavaScript,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。通过XMLHttpRequest对象,Web开发人员可以在页面加载以后进行页面的局部更新
在创建此对象时一定要考虑浏览器的问题,检查浏览器是否支持 XMLHttpRequest 对象。如果支持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject

//创建XMLHttpRequest对象 需要考虑浏览器兼容的问题
var xmlHttp;
function createXMLHttp(){
     if(window.XMLHttpRequest){//IE7+, Firefox, Chrome, Opera, Safari
     	xmlHttp=new XMLHttpRequest();
     }else{// IE6, IE5
     	xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");	
     }
}

AJAX向服务器发送请求,使用XMLHttpRequest对象的open()和send()方法
open()方法包括三个参数,open(method,url, async)
1、第一个参数method是请求的类型(方式),可以用get,也可以用post,一般用post方式来提交,相对安全稳定。
2、第二个参数url是文件在服务器上的位置(该文件可以是任何类型的文件,比如.xml和.txt,或者服务器脚本文件,比如 .asp 和 .php (在传回响应之前,能够在服务器上执行任务))
3、第三个参数async代表是异步(true)还是同步(false)提交
XMLHttpRequest对象如果要用于AJAX的话,open()方法的async参数必须设置为true

xmlhttp.open("GET","test.html",true);

其实很多程序在执行任务的时候都会很耗时,而通过AJAX,JavaScript不需要等待服务器的响应,则是在等待服务器响应是执行其他脚本,当响应就绪后对响应进行处理。
发送请求到服务器,服务器返回内容,那么是通过什么来处理这个内容呢,往往是通过用回调函数onreadystatechange完成
当使用 async=true 时,必须规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数:
$.ajax执行异步AJAX 请求
async规定 XML 文件的下载是否应当被异步处理
onreadystatechange 事件:存储函数(或函数名),每当readyState改变时,就会触发onreadystatechange事件
readyState:有五种状态
0,请求没有发出(在调用open()函数之前)
1,请求已经建立但还没有发出(调用send()函数之前)
2,请求已经发出正在处理之中(这里通常可以从响应得到内容头部)
3,请求已经处理,正在接受服务器的信息,响应中通常有部分数据可用,但是服务器还没有完全响应
4,响应已经完成,可以访问服务器响应并使用它(主要是用这个)
Status:状态 200:“ok”,404:未找到页面
在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。
当 readyState 等于 4 且状态为 200 时,表示响应已就绪

xmlHttp.onreadystatechange=function(){//回调操作函数
    if(xmlHttp.readyState==4){//如果调用完成
   		if(xmlHttp.status==200){//Http状态码操作正常
   	  		document.getElementById("msg").innerHTML=xmlHttp.responseText;
   		}
    }
 }

async=false(同步),同步模式发出的请求会暂停所有javascript代码的执行,直到服务器获得响应为止,如果浏览器在连接网络时或者在下载文件时出了故障,页面就会一直挂起。

xmlhttp.open("GET","test.html",false);
xmlhttp.send();
document.getElementById("myTest").innerHTML=xmlhttp.responseText;

不推荐使用async=false,但对于一些小型的请求,也是可以的。
不要编写onreadystatechange函数,把代码放到send()语句后面即可。
XMLHttpRequest 支持同步和异步通信。但是,一般来说,出于性能原因,异步请求应优先于同步请求。同步请求阻止代码的执行,这会导致屏幕上出现“冻结”和无响应的用户体验。
如果你使用XMLHttpRequest发送异步请求,那么当请求的响应数据完全收到之时,会执行一个指定的回调函数,而在执行异步请求的同时,浏览器会正常地执行其他事务的处理
send()向服务器发送请求
send(string) post请求时才使用字符串参数,否则不用带参数(get请求时)
通过 AJAX,JavaScript 无需等待服务器的响应,而是:
• 在等待服务器响应时执行其他脚本
• 当响应就绪后对响应进行处理
服务器响应:
需要获得来自服务器的响应,就会用到XMLHttpRequest对象的responseText或responseXML
responseText获得字符串形式的响应数据(如果来自服务器的响应不是xml,就用responseText属性)
responseXML获得xml形式的响应数据

四、AJAX的优缺点
优点:
1、页面无刷新,用户的体验非常好。
2、使用异步方式与服务器通信,具有更加迅速的响应能力。
3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和宽带的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。
4、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序
缺点:
1、ajax不支持浏览器back按钮,即对浏览器后退机制的破坏。
2、存在安全隐患问题,AJAX暴露了与服务器交互的细节。
3、对搜索引擎的支持比较弱。
4、破坏了程序的异常机制。
5、不容易调试
原生的JS写法

 var xmlHttp;
 function createXMLHttp(){
 	if(window.XMLHttpRequest){//IE7+, Firefox, Chrome, Opera, Safari
 		xmlHttp=new XMLHttpRequest();
 	}else{// IE6, IE5
 		xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");	
 	}
 }
 function showMsg(){
 	createXMLHttp();//创建XMLHttp对象
 	//请求
 	xmlHttp.open("POST", "ceshi.html",true);
 	//设置操作的回调函数
 	xmlHttp.onreadystatechange=callBack;
 	xmlHttp.send(null);//发送
 }
 function callBack(){//回调操作函数
	//如果调用完成及Http状态码操作正常
 	if(xmlHttp.readyState==4 && xmlHttp.status==200){ 
 		  document.getElementById("msg").innerHTML=xmlHttp.responseText;
 		}
 	}
 }

JQuery写法:

$.ajax({
	type: "POST",
	url: "${ctx}/servlet/LoginServlet?type=login",
    data:{UserNuber:UserNuber,Password:password,Codekey:Codekey},//发送到服务器的参数
	dataType: "json",//服务器响应的数据类型
	success: function (data) {//成功后回调
	if(data.state){
		layer.alert("登录成功!",{ icon: 0, title: '提示'});
	}
	else{
		layer.alert(data.msg, { icon: 0, title: '提示'});
	}
},
});
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值