菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
0
0

Ajax详解

原创
05/13 14:22
阅读数 154

一、为什么使用Ajax?

在没有使用Ajax之前,我们使用传统web技术时,每次客户端会同步发送请求,服务器都需要加载整个页面,直到请求完毕后才发出响应,如果页面内容量大,那加载页面的时间会留出空白,导致有很差的用户体验等等,所以Ajax在这个问题上进行了补充。

二、Ajax说明

概念

Ajax全称为 Asynchronous JavaScript and Xml,由JavaScript、CSS、XML等几种技术整合而成。

作用

Ajax实现了页面无刷新加载,在需要的时候可以只更新页面的一小部分内容,而不必重新生成整个页面。

三、Ajax的特点和优势

特点

语言: JavaScript是实现Ajax技术所使用的主要开发语言
Ajax引擎: 即xmlHttpRequest核心对象,可以用异步的形式在浏览器和服务器之间传送数据。
数据格式: 传送数据时,有几种常用的数据格式,如: JSON,XML,HTML

优势

●避免重复加载
●提高了加载速度
●优化了用户体验

四、异步和同步

1.同步发动请求

说起同步,我们的传统web就是同步发送请求,那么同步是什么呢?——浏览器发送了一个请求,服务器去处理请求时,必须要将请求处理完成后,才可以做出响应。

2.异步发送请求

JavaScript就是一个异步,而我们的Ajax就是基于JS去实现的,那么什么是异步呢?——浏览器发送了一个请求,服务器去处理请求,你去处理你的,我照样往下执行,等我要响应的时候,自然会把处理好的响应数据给到浏览器去局部更新页面,实现无刷新加载页面。
五、Ajax的工作流程 #

1.传统web执行方式

这里找不到流程图,所以我口说,哈哈哈。

传统web执行方式: 当浏览器发送请求后,比如说发送的资源是动态资源,也就是jsp等等,服务器接收请求并去处理,等待处理完成后服务器发出响应,浏览器接收并且显示。

2.Ajax执行方式

图片.png
**Ajax执行方式: **当用户界面触发某个事件后调用JavaScript,通过Ajax引擎即xmlHttpResquest核心对象发出异步请求,服务器接收并处理请求,服务器不会等待响应的数据,而是继续往下执行,当执行回调函数时,响应的数据会自动拿到,回调函数处理响应,并使用DOM+CSS技术利用返回的数据局部更新页面内容。

注意:服务器响应以XML、JSON或HTML格式返回数据或者普通文本。

六、Ajax的使用

1. XmlHttpRequest核心对象

概念

XmlHttpRequest对象是Ajax技术的核心,用于与服务器进行交互,它可以在不刷新当前页面的情况下向服务器发送特定的URL异步发送请求,获取数据,从而在当前页面中显示局部更新的效果。

语法

     xmlHttpRequest=new XMLHttpRequest(); 

常用属性

属性名称 说明
onreadystatechange 设置回调函数,作为readyState属性值改变时的事件处理程序
readyState 返回请求的当前状态,取值从0到4变化。
0——未初始化
1——已初始化
2——请求发送完成
3——开始读取响应
4——读取响应结束
status 返回当前请求的Http状态码
常用值举例:
200——正确返回
404——找不到访问对象
statusText 返回当前请求的响应行状态
responseText 以文本形式获取响应值
responseXML 已XML形式获取响应值,并且解析成DOM对象返回

常用方法

属性名称 说明
open(String method,String url,booleanasync,String user,String password) 创建一个新的HTTP请求。
method参数: 提交方式POST,GET等等,大小写不敏感
url: 请求的url
async: 可选,指定此请求是否为异步方法,默认为true.
user: 参数,可选,指定用户名
password: 可选,验证信息中的密码
send(String data) 发送请求到服务器端
data参数: 如果请求是get方式,可指定为null,否,是POST,需要指定参数
abort() 取消当前请求
setRequestHeader(String header,String value) 设置请求头信息
header参数: 指定的HTTP头部名称
value参数: 指定的HTTP头部名称对应的值
getResponseHeader(String header) 从响应中获取指定的HTTP头信息
getAllReponseHeaders() 获取响应的所有HTTP头信息

老版本IE兼容问题

在IE浏览器(IE5和IE6)中创建XmlHttpRequest的方式和现在的版本的方式不同,为了使程序兼容更好,语法如下:

xmlHttpRequest=new ActiveXObjext("Microsoft.XMLHTTP");

2.原生Ajax的创建及使用方式

以验证手机号是否已经注册为例

Html代码

    <form action="#">
        手机号: <input type="text" id="phone" name="phone" οnblur="checkPhone()"><span id="error"></span> <br>
        <input type="submit" value="注册">
    </form>

Ajax的创建及发送请求

    /**
             * 检验手机号是否已注册
             */
            function checkPhone() {
                //获取手机号
                var phone = document.getElementById("phone").value;
                //解决浏览器兼容问题
                if (window.XMLHttpRequest) {
                    //创建Ajax核心对象
                    xmlHttpRequest = new XMLHttpRequest();
                } else {
                    xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                }
                var url = "/demo/phoneServlet";
                //创建回调函数
                xmlHttpRequest.onreadystatechange = callback;
                //创建异步请求
                // xmlHttpRequest.open("GET",url,true);
                xmlHttpRequest.open("POST",url,true);
                //使用POST需设置请求头信息
                xmlHttpRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
                //发送请求
                xmlHttpRequest.send("phone="+phone);
            }
     
             //回调函数 : 处理响应 显示DOM+CSS
            function callback() {
                if(xmlHttpRequest.readyState==4 && xmlHttpRequest.status==200)
                {
                    //接收响应文本数据
                    var data = xmlHttpRequest.responseText;
                    if (data == "true") {
                        document.getElementById("error").innerHTML = "手机号已被注册!";
                        document.getElementById("error").style.color = "red";
                    } else {
                        document.getElementById("error").innerHTML = "手机号可以注册";
                        document.getElementById("error").style.color = "green";
                    }
     
                }
            }

3.使用JQuery简化Ajax技术的实现

(1) 为什么使用JQuery来简化Ajax?

在使用原生JavaScript实现了Ajax无刷新技术,实现过程很复杂,又要考虑浏览器兼容问题,所以使用JQuery会很简洁。

(2) 概念

JQuery将Ajax的操作都进行了封装,通过调用一个方法就可以完成发送请求和处理复杂格式的响应结果,简洁方便且结构清晰。

(3)核心方法——$.ajax()

    $.ajax([settings])  //settings是ajax方法的参数,用于配置Ajax请求的键值对集合

(4)$.ajax()方法的常用配置参数

参数 类型 说明
url String 请求的URL,默认为当前页的地址
type String 请求方式: 如: get post 等等
data String,Array,或… 发送服务器端的数据,也就是参数
dataType String 服务器返回的数据类型,有:XML,HTML,JSON,Text…
sucess Function(任意类型) 请求成功后调用的函数
error Function(…) 请求失败时调用的函数
complete Function(…) 请求完成后调用的函数,相当于java异常中的finally

(5)JQuery对Ajax进行封装的使用方式

     function  checkPhone()
        {
            $.ajax({
                "url" : "/demo/phoneServlet",
                "type": "POST",
                "data": "phone="+$("#phone").val(),
                "dataType": "text",
                "success": callBack,
                "error":function ()
                {
                    alert("手机验证时出现错误,请稍后再试!");
                }
     
            });
            //响应成功时的回调函数
            function  callBack(data)   //参数表示响应结果
            {
               if(data=="true")
               {
                   $("#error").html("手机号已被注册!");
                   $("#error").css("color","red");
               }else
               {
                   $("#error").html("手机号可以注册!");
                   $("#error").css("color","green");
               }
     
            }
        }

JQuery对Ajax的各种功能都进行了封装,调用.ajax()就不需要像原生Ajax一样去写繁琐的open,send,以及请求的处理,他的处理信息都在ajax(settings)的配置参数中,在这里$.ajax() 的数据是使用键值对的形式也就是JSON去传递数据的。

发表评论

0/200
0 点赞
0 评论
收藏