10 AJAX

目录:

1. AJAX的作用

2. XMLHttpRequest

3. AJAX重构

4. 使用AJAX的一般结构

一、AJAX

AJAX(Asynchronous Javascript And XML)是一种不刷新整个页面的情况下,与服务器端交互并动态更新当前页面的技术。目前AJAX已经被广泛使用,如百度地图、进度条显示等都是使用了AJAX技术。

传统的web开发每当页面上有数据更改(来自后台的数据),局需要刷新整个界面,这加大了数据流量,AJAX可以在一定条件下才向服务器发送请求,并获得新数据,刷新部分页面。

AJAX一般是前端展示的界面,涉及到CSS/HTML/JS以及额外的XMLHttpRequest。重点就是这个XMLHttpRequest,用它来实现与服务器的交互,而不是每次点击按钮就自动把request对象发送给服务器。而且获得返回的数据也是部分的数据。

二、XMLHttpRequest

XMLHttpRequest其实是一个类,在IE浏览器和非IE浏览器是不同的类名,但是方法属性都是一样的,在js函数中生成这个类:

req=false;//因为js可以不声明对象的类。
if(windows.XMLHttpRequest){
    req=new XMLHttpRequest();//非ie浏览器
}else if(windows.ActiveXObject){
    try{
        req=new ActiveXObject("Msxml2.XMLHTTP");//IE浏览器的一部分版本
    }catch(e){
        try{
            req=new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器的另一部分版本
        }catch(e){}
    }
}
if(!req){
    alert("生成req失败");
    return false;
}

XMLHttpRequest类有一些重要的属性与方法:

1. onreadstatechange

这个属性指向一个不但参数的回调方法,就是当请求成功后,用哪个方法处理返回值,因为函数时不带参数的,但是可以使用匿名函数:

req.onreadstatechange=function(){

deal("参数值")

}

2. readyState

这个属性表示获取请求的状态:

0:为初始化 1:正在加载 2:已加载 3:交互中 4:完成(一般都是请求是否处于整个状态再进行后续动作)

在判断完了请求状态后,还要判断http请求返回的状态:就是req.status是不是等于200。

3.open('GET/POST',url,true)

这个方法发送一个请求,一般在url中包含了action的值,这样服务器可以根据action的值调用相应的方法。url中最好还要包含当前的时间,不然网页可能不刷新。true表示当前是异步方式发送的,异步表示不需要接收服务器的响应就可以继续发送其他数据。

4. send(obj)

这个方法也是想服务器发送数据,因为get方法发送的数据可以直接写在open的url中,所以可以用open方法发送,但是post方法的数据最好用send方法发送。如果方法是get,则send中的obj为null,send方法必须用在open方法后,open方法相当于提供各了连接。

三. AJAX重构

当需要更新网页不同地方的部分内容时,就需要多次生成XMLHttpRequest,这样编写代码很麻烦,所以最好把生成XMLHttpRequest的代码,以及指定处理函数等代码放在一个文件中,需要时就调用,不同部分的内容需指定不同的处理函数,以参数传递的方式指定。

一个XMLHttpRequest使用的js文件为:

参数输入:url(如果是get方法,则url中包含了传递的参数),dealFunName,ErrorFunName,Get/Post,params(如果方法是post,这个里面包含了post想要传递的参数)

生成XMLHttpRequest对象

指定请求响应函数A:deal,deal函数也在该文本中实现,在deal函数中指派成功时执行的函数dealFunName,失败时执行的函数ErrorFunName

设置连接:open(Get/Post,url,true);

如果方法为post,则需要设置请求头:req.setRequestHeader("Content-Type","application/x-www/form-urlencoded")

发送post请求的数据:send(params)

四. 使用AJAX的一般结构

1. 写一个第三部分说的js文件实现XMLHttpRequest的相关功能。

2. 在jsp1页面中实现展示页面,并在需要提交数据或者获取数据的地方生成一个js中的req类;实现获取到返回数据的处理函数dealFunName;实现出错时的处理函数:ErrorFunName

3. 写servlet类或者jsp2页面处理获取前端的数据已经生成返回的数据。

 

最近试了一下这个,发现有些问题要注意:

1. 在调用变量函数(变量存储的是一个函数)时,用call方法回调,call的第一个实参一定要是this,不然会和形参因为默认的call的第二个参数才对应函数的第一个形参。

2. 只要是函数变量,就一定要用call方法回调,否则会说不存在这个变量或方法

3. ajax需要提供url,这个url只需要写servlet类的名字,不需要写后缀,不论它在哪个包。也可以写jsp,但是可能需要写后缀,书上写了后缀,但是我还没实践。

4. 除了用js来实现ajax外,还可以用jQuery很简介地写ajax,但是需要引入jQuery.js包:

<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

具体ajax实现可以在网上找,很多。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值