AJAX就是这么简单

一.简介

1、什么是AJAX

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
AJAX 允许您仅将重要信息发送到服务器而不是整个页面。因此,只有来自客户端的有价值数据才会路由到服务器端。它使您的应用程序具有交互性和更快。
Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术

2、AJAX有哪些优点?

快速回复响应
带宽利用率
在从服务器检索数据之前,不会阻止用户。一个请求阻塞不会影响其他请求,也就是异步请求
它允许我们只将重要数据发送到服务器。它在不重新加载页面的情况下更新数据。
它使应用程序具有交互性和更快速。

3、AJAX有哪些缺点?

取决于JavaScript
安全问题
调试很困难

4、原理

在这里插入图片描述

  1. 用户从UI发送请求,JavaScript中调用XMLHttpRequest对象。
  2. HTTP请求由XMLHttpRequest对象发送到服务器。
  3. 服务器使用JSP,PHP,Servlet,ASP.net等与数据库交互。
  4. 检索数据。可能发送阻塞.
  5. 服务器将XML数据或JSON数据发送到XMLHttpRequest回调函数。
  6. HTML和CSS数据显示在浏览器上。
    总结: 客户端发送的请求,不是直接发送给服务器,而是发送给AJAX引擎,也就是XMLHttpRequest, 客户端接受的响应也不是服务端直接发送的,而是Ajax引擎接受到服务器的响应,经过处理后转发给客户端的. 一次请求阻塞不会影响下一次请求.

二.基本对象的介绍

XMLHttpRequest 对象

MLHttpRequest 是 AJAX 的基础。

  • XMLHttpRequest 术语缩写为XHR,中文可以解释为可扩展超文本传输请求。
  • XMLHttpRequest 对象可以在不向服务器提交整个页面的情况下,实现局部更新网页。
  • XMLHttpRequest的对象用于客户端和服务器之间的异步通信。

它执行以下操作:

  1. 在后台从客户端发送数据
  2. 从服务器接收数据
  3. 更新网页而不重新加载。

XMLHttpRequest对象的属性

属性描述
onreadystatechange存储函数(或函数名),每当readyState的属性改变时,就会调用该函数。
readyState存有的XMLHttpRequest的状态从0到4发生变化。
0:请求未初始化
1:服务器连接已建立
2:请求已接收
3:请求处理中
4:请求已完成,且响应已就绪
reponseText以文本形式返回响应。
responseXML以XML格式返回响应
status将状态返回为数字(例如,“Not Found”为404,“OK”为200)
statusText以字符串形式返回状态(例如,“Not Found”或“OK”)

XMLHttpRequest对象的方法

方法描述
abort()取消当前请求。
getAllResponseHeaders()以字符串形式返回完整的HTTP标头集。
getResponseHeader( headerName )返回指定HTTP标头的值。
void open(method,URL)打开指定获取或交的方法和URL的请求。
void open(method,URL,async)与上面相同,但指定异步或不。
void open(method,URL,async,userName,password)与上面相同,但指定用户名和密码。
void send(content)发送获取请求。
setRequestHeader( label,value)将标签/值对添加到要发送的HTTP标头。

三.JavaScript原生实现Ajax

1、步骤

)创建Ajax引擎对象
)为Ajax引擎对象绑定监听(监听服务器已将数据响应给引擎)
)绑定提交地址
)发送请求
)接受响应数据

2、代码实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>js的Ajax</title>
</head>
<body>
<input type="button" value="点击发送ajax请求" onclick="jsAjax()">
<div id="resultDiv">
    在这里显示服务器响应结果
</div>
<script>
    /**
     * 结果说明:
     * 1.发送请求时,页面没有刷新.
     * 2. 服务器被调用了
     * */
    function jsAjax() {
        //1.创建一个Ajax引擎对象
        var xmlHttpRequest = new XMLHttpRequest();
        //2.给Ajax引擎对象绑定事件,监听状态变化
        xmlHttpRequest.onreadystatechange = function () {
            //状态为4,也就是服务器返回响应的时候,发送响应给客户端
            if (xmlHttpRequest.readyState === 4 && xmlHttpRequest.status === 200) {
                 //把服务器返回的响应内容显示到#resultDiv中
                 document.getElementById("resultDiv").innerHTML = xmlHttpRequest.responseText;
            }
        };
        //3.设置请求的信息,参数分别是: 请求方式  请求资源的路径(相对路径)   是否异步
        xmlHttpRequest.open("get", "AjaxServlet_01", true);
        //4.发送请求
        xmlHttpRequest.send();  
    }
</script>
</body>
</html>

如果发送请求的时候需要携带数据,那么只需要改变步骤 第3和第4就可以,
get和post的携带请求数据的方式不一样,下面展示携带数据username=zuoyueer&password=123456的实现:

         //3.post请求
        xmlHttpRequest.open("get", "AjaxServlet_01", true);
        //3.1 设置请求头,必须设置,不然无法携带数据
        xmlHttpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        //4.发送请求,并且挈带数据
        xmlHttpRequest.send("username=zuoyueer&password=123456");
       
        // 3. get也可以携带数据,如下
         xmlHttpRequest.open("get", "AjaxServlet_01?username=zuoyueer&password=123456", true);
       //4.发送请求
         xmlHttpRequest.send();

3、小结

我们可以看到,以上代码有很多是固定不变的,那么多次请求,都要写这些固定代码,就会造成代码冗余严重 ,
因此实际开发中,JS原生实现Ajax是不会使用的,因为太麻烦了,我们有简单的方法,那就是JQuery的实现.

四.jQuery实现Ajax 的3种方式

1、get方式

1.1特点

GET请求具有以下的几个特点:

  • GET请求可被缓存
  • GET请求保留在浏览器历史记录中
  • GET请求可被收藏为书签
  • GET请求不应在处理敏感数据时使用
  • GET请求有长度限制
  • GET请求只应当用于取回数据

1.2语法

GET方式的请求: $.get(url, data, callback, type) 其中url是必须的,其他根据需求选择.

参数名称解释
url请求的服务器端url地址
data发送给服务器端的请求参数,格式可以是key=value,也可以是js对象
callback当请求成功后的回掉函数,可以在函数体中编写我们的逻辑代码
type预期的返回数据的类型,取值可以是 xml, html, script, json, text, _defaul等

1.3实现

//jQueryAjax_get是某一事件触发时候执行的函数,也就是说事件触发,就发送异步get请求
 function jQueryAjax_get() {
        $.get("AjaxServlet_01", "username=jack&password=123", function (result) {
            $("#resultDiv").html(result);
        }, "text");
    }

2、post方式

2.1特点

POST请求的特点如下:

  • POST请求不会被缓存
  • POST请求不会保留在浏览器历史记录中
  • POST请求不能被收藏为书签
  • POST请求对数据长度没有要求

2.2语法

POST方式的请求: $.post(url, data, callback, type) 其中url是必须的,其他根据需求选择.

参数名称解释
url请求的服务器端url地址
data发送给服务器端的请求参数,格式可以是key=value,也可以是js对象
callback当请求成功后的回掉函数,可以在函数体中编写我们的逻辑代码
type预期的返回数据的类型,取值可以是 xml, html, script, json, text, _defaul等

2.3实现

//jQueryAjax_post是某一事件触发时候执行的函数,也就是说事件触发,就发送异步post请求
function jQueryAjax_post() {
        $.post("AjaxServlet_01", "username=jack&password=123", function (result) {
            $("#resultDiv").html(result);
        }, "text");
    }

3、ajax方式

3.1特点

ajax的特点如下:

  • 可以动态选择get或者post方式发送请求
  • 功能比前2种方式,更加强大

3.2语法

ajax方式的请求: $.ajax({key:value, key:value,...})其中每个key就一个配置项

常用配置项有:

  • url:请求资源的路径
  • data:提交的表单参数,格式有两种:
    • 键值对形式: name=value&name=value&…
    • js对象形式 {name:value, name:value, …}
  • type:请求方式,常用的get,post
  • dataType:服务端返回的数据格式/类型,常用的text, json
  • success: 回调函数function(result){}处理响应结果. 其中result接受服务器响应数据,是形参,按照你自己的习惯取一个名字,我取的是result
  • async:是否异步

3.3实现

 function jQueryAjax_ajax() {
        $.ajax({
            url: "AjaxServlet_01",
            type: "post",
            data: "username=jack&password=123",
            //再此我说下我们经常提交的表单数据发送: 定位到form表单,调用serialize()方法系列化表单,注意表单的input标签必须有name属性不然无法序列化该数据
            //data:$('#yourformid').serialize(),  
            async: true,
            success: function (result) {
                $("#resultDiv").html(result);
            },
            dataType: "text"
        });
    }

4、扩展: jQuery3.0 的GET和POST新增签名方式

大白话就是:前2种get和post方式都能使用ajax方式中的语法来写! 从而增强post和get的功能,实际很少用

4.1实现

  function jQueryAjax_get2() {
        $.get({
            url: "AjaxServlet_01",
            async: true,
            success: function (result) {
                $("#resultDiv").html(result);
            },
            type: "post",//即使是get调用,也可以设置成post方式,设置哪种就是哪种提交
            dataType: "text"
        });
    }


    function jQueryAjax_post2() {
        $.post({
            url: "AjaxServlet_01",
            data: "name=zuoyueer&age=23",
            dataType: "text",
            type: "post",
            success: function (result) {
                $("#resultDiv").html(result);
            },
            async: true
        });
    }

五.总结

  • 虽然Ajax是异步JavaScript和xml技术,但是现实是xml已经淘汰了,真正的优秀项目,都使用json作为数据传输的格式,
  • JavaScript原生实现Ajax异步请求的方式,代码冗余,实际是不会去使用的,而是使用jQuery的3种方式,jQuery的本质就是js, 只不过封装了具体实现,简化了代码.程序员使用起来方便高效
  • jQuery的3种方式种,前2种,就是名字不一样,一个是get一个是post,参数都一样. 当然他们发生的请求自然也不一样
  • jQuery的第三种ajax方式的属性对([配置项)远远不止我写的那几个, 我写的那几个是经常用到的,其他的可以配置项可以自己去找资料,我这里就不赘述了.
  • 新增的签名方式,实际上就是get和post使用了配置项的语法,使得功能更加强大,使用更加灵活, 因为配置项的顺序是可以随便的,
  • 至于3种方式使用哪种,那就看需求和个人习惯了,就我个人比较喜欢第3种方式,因为灵活多变,避免以后项目增加功能导致修改麻烦.
  • json作为数据传输的格式取代了xml,我将在下一篇文章种详细介绍.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值