AJAX技术使用及其原理

Ajax技术使用与原理

1、简介

AJAX —— Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

AJAX 是与服务器交换数据并更新部分⽹⻚的技术,在不重新加载整个⻚⾯的情况下

2、 所包含的技术

  1. 使用CSS和XHTML

  2. 使用DOM模型来交互和动态显示。

  3. 使用XMLHttpRequest 对象

  4. 使用JavaScript 来绑定和调用

AJAX 的核心是 XMLHttpRequest 对象

不同的浏览器创建XMLHttpRequest对象的方法是有差异的。
IE浏览器使用ActiveObject,而其他的浏览器使用XMLHttpRequest 的 JavaScript 内建对象

3、工作原理

Ajax的⼯作原理相当于在⽤户和服务器之间加了—个中间层(AJAX引擎),使⽤户操作与服务器响应异步化。并不是所有的⽤户请求都提交给服务器。

像—些数据验证和数据处理等都交给Ajax引擎⾃⼰来做,,只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。

传统方式:

在这里插入图片描述

新型方式:

在这里插入图片描述

交互方式

浏览器的普通交互方式:

客户端发送请求,等待服务器响应,只有服务器响应成功,客户端才能继续发送请求,服务器才能接着处理请求;

如果服务器正在处理客户端的请求,客户端再次发送请求时,只能等待服务器端处理响应成功,客户端的请求才能接着被处理,或者只能排队等待!

在这里插入图片描述

浏览器的Ajax交互⽅式

由下图我们就能看出,服务器端能处理多个请求,即使服务器处理完的请求还没有响应到客户端,客户端也能继续发送请求。(这样就很大程度上提升了用户的体验感)

在这里插入图片描述

下⾯是使⽤Ajax可以完成的功能:

在创建Web站点时,在客户端执⾏屏幕更新为⽤户提供了很⼤的灵活性。如:动态更新购物⻋的物品总数,⽆需⽤户单击Update并等待服务器重新发送整个⻚⾯。

提升站点的性能,这是通过减少从服务器下载的数据量⽽实现的。例如,在Amazon的购物⻋⻚⾯,当更新篮⼦中的⼀项物品的数量时,会重新载⼊整个⻚⾯,这必须下载32K的数据。如果使⽤Ajax计算新的总量,服务器只会返回新的总量值,因此所需的带宽仅为原来的百分之⼀。

消除了每次⽤户输⼊时的⻚⾯刷新。例如,在Ajax中,如果⽤户在分⻚列表上单击Next,则服务器数据只刷新列表⽽不是整个⻚⾯。

直接编辑表格数据,⽽不是要求⽤户导航到新的⻚⾯来编辑数据。对于Ajax,当⽤户单击Edit时,可以将静态表格刷新为内容可编辑的表格。⽤户单击Done之后,就可以发出⼀个Ajax请求来更新服务器,并刷新表格,使其包含静态、只读的数据。

4、XMLHttpRequest常用属性和方法

(1)onreadystatechange 属性

onreadystatechange 属性存有处理服务器响应的函数

例:

xmlHttp.onreadstatechange = function(){
    // ...
    // 这是可以处理服务器响应的代码
}

(2)readyState 属性

readyState 属性存有服务器响应的状态信息。每当readyState 改变时,onreadystatechange 函数就会被执行

readyState 属性可能的值:

状态描述
0请求未初始化(再调用open()之前)
1请求已提出(调用send()之前)
2请求已发送(这里通常可以从响应得到内容头部)
3请求处理中(响应中通常有部分数据可用,但是服务器还没有完成响应)
4请求已完成(可以访问服务器响应并使用它)

我们要向这个 onreadystatechange 函数添加⼀条 If 语句,来测试我们的响应是否已完成(意味着可获得数据):

xmlHttp.onreadystatechange = function() { 
     if (xmlHttp.readyState == 4) { 
     	//从服务器的response获得数据 
     }
}

(3)responseText 属性

可以通过 responseText 属性来取回由服务器返回的数据。

在我们的代码中,我们将把input⽂本框的值设置为等于 responseText:

xmlHttp.onreadystatechange = function() { 
     if (xmlHttp.readyState == 4) { 
     	document.myForm.value = xmlHttp.responseText; 
     }
}

其他属性

在这里插入图片描述

(4)open() 方法

open() 有三个参数。第⼀个参数定义发送请求所使⽤的⽅法,第⼆个参数规定服务器端脚本的URL,第三个参数规定应当对请求进⾏异步地处理。

xmlHttp.open("GET","test.php",true);

(5)send() 方法

send() ⽅法将请求送往服务器。如果我们假设 HTML ⽂件和 PHP ⽂件位于相同的⽬录,那么代码是这样的

xmlHttp.send(null);

其他方法

在这里插入图片描述

5、传统JavaScirpt 的 ajax操作

步骤:

  1. 创建XMLHttpRequest 对象(new XMLHttpRequest() )
  2. 设置请求方式 ( xmlHttp.open(…) )
  3. 调用回调函数( onreadystatechange = function(){ … } )
  4. 发送请求( send() )

Demo:使用Ajax 验证用户名

servlet

@WebServlet(urlPatterns = "/ajaxtest")
public class AjaxServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name");
        // 设置返回内容
        resp.setContentType("text/html;charset=utf-8");
        //1.接收参数
        String username = req.getParameter("username");
        System.out.println(name);
        Writer out = resp.getWriter();
        if ("admin".equals(name)){
            out.write("用户已经被注册!!!");
        } else{
            out.write("用户没有被注册!!!");
        }
    }
}

js:

 document.getElementById("name").onblur = function (){
        // 使用原生javascript
        // 1. 创建xmlHttpRequest对象
        var xmlHttp;
        if (window.XMLHttpRequest) {
            // 非IE
            xmlHttp = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        // 2. 设置和服务器端交互的 请求路径,相应参数
        // 2.1 获取input->value
        var value = this.value;
        xmlHttp.open("GET","/ajaxtest?name="+value,true);
        // 3. 注册回调函数
        xmlHttp.onreadystatechange = function (){
            if (xmlHttp.readyState == 4){
                if (xmlHttp.status == 200){
                    console.log(xmlHttp.responseText)
                    document.getElementById("res").innerHTML = xmlHttp.responseText;
                } else{
                    alert("AJAX服务器返回错误!");
                }
            }
        }
        // 4. 发送
        xmlHttp.send();
    }

html:

<body>
    <h1>ajaxTest</h1>
    用户名<input type="text" id="name"> <span id="res"></span>
</body>

没有输入结果用户名前:

在这里插入图片描述

输入用户名 失去焦点后触发事件 发送ajax请求 得到响应

在这里插入图片描述

输入admin

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值