Ajax

AJAX

AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术

AJAX 是什么?

AJAX = Asynchronous JavaScript and XML

AJAX 是一种用于创建快速动态网页的技术

AJAX 通过在后台与服务器进行少量数据交换,使网页实现异步更新,这意味着可以在不重载整个页面的情况下,对网页的某些部分进行更新

传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个页面

AJAX 基于因特网标准

AJAX 基于因特网标准,并使用以下技术组合:

  • XMLHttpRequest 对象(与服务器异步交互数据)
  • JavaScript/DOM(显示/取回信息)
  • CSS(设置数据的样式)
  • XML(常用作数据传输的格式)

lamp AJAX 应用程序与浏览器和平台无关的!

AJAX - 创建 XMLHttpRequest 对象


XMLHttpRequest 是 AJAX 的基础。


XMLHttpRequest 对象

所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。

XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新


创建 XMLHttpRequest 对象

所有现代浏览器(IE7+、Firefox、Chrome、Safari 以及 Opera)均内建 XMLHttpRequest 对象。

创建 XMLHttpRequest 对象的语法:

variable = new XMLHttpRequest();

老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象:

variable = new ActiveXObject("Microsoft.XMLHTTP");

为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象。如果支持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject :

var xmlhttp; 
if (window.XMLHttpRequest) {

//  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码   
    xmlhttp=new XMLHttpRequest(); 

} else {    

// IE6, IE5 浏览器执行代码    
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

向服务器发送请求

如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:

open(method,url,async)

规定请求的类型、URL 以及是否异步处理请求。

  • method:请求的类型;GET 或 POST
  • url:文件在服务器上的位置
  • async:true(异步)或 false(同步)
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

send(string)

将请求发送到服务器。

  • string:仅用于 POST 请求

服务器响应

如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。

属性 描述
responseText 获得字符串形式的响应数据。
responseXML 获得 XML 形式的响应数据。

onreadystatechange 事件

当请求被发送到服务器时,我们需要执行一些基于响应的任务。

每当 readyState 改变时,就会触发 onreadystatechange 事件。

readyState 属性存有 XMLHttpRequest 的状态信息。

下面是 XMLHttpRequest 对象的三个重要的属性:

属性 描述
onreadystatechange 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
readyState 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。0: 请求未初始化1: 服务器连接已建立2: 请求已接收3: 请求处理中4: 请求已完成,且响应已就绪
status 200: “OK” 404: 未找到页面

在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。

当 readyState 等于 4 且状态为 200 时,表示响应已就绪:

后端进行一个简单的用户伪校验

@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    request.setCharacterEncoding("utf-8");
    response.setContentType("html/text;charset=utf-8");

    String username = request.getParameter("username");
    String password = request.getParameter("password");

    if (username.equals("jack001") && password.equals("123456")){

        response.getWriter().print("1");

    }else {

        response.getWriter().print("2");

    }

}

Ajax(JS)

一个基于JS原生Ajax的用户数据后端校验

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>原生js的ajax</title>
</head>

<script>

    //测试Ajax的函数
    function testAjax(){

        let xmlHttp;

        //判断是不是ie浏览器
        if(window.XMLHttpRequest){

            xmlHttp = new XMLHttpRequest();

        }else {

            xmlHttp = ActiveXObject("Microsoft.XMLHTTP");

        }

        let usernameEl = document.getElementById("username");

        let passwordEl = document.getElementById("password");

        let username = usernameEl.value;

        let password = passwordEl.value;

        //设置参数
        xmlHttp.open("GET","http://localhost:8080/jQuery/test?username="+username+"&password="+password,true);

        //访问具体的服务,发送请求
        xmlHttp.send();

        //绑定监听事件
        xmlHttp.onreadystatechange = function (){

            //判断服务器和网页的状态
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200){

                //获取服务器响应的数据
                alert(xmlHttp.responseText);

            }

        }

    }

</script>

<body>
请输入用户名:<input type="text" id="username" value=""><br>
请输入用户名密码:<input type="password" id="password" value=""><br>
<input type="button" value="ajax监听事件按钮" onclick="testAjax()">

</body>
</html>

Ajax(JQuery)

一个基于Ajax的用户登录校验

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery的ajax</title>
</head>
<script src="../jQuery/jquery-1.7.2.js"></script>
<script>

   $(function (){

       $("[value=提交]").click(function (){

           //获取用户名和密码的值
           let username = $("#username").val();

           let password = $("#password").val();

           //调用ajax函数
           $.ajax({

               //提交到后端的地址
               url:"http://localhost:8080/jQuery/test",

               //提交的方式
               type:"POST",

               //提交到后端的数据
               data:{
                   username:username,
                   password:password
               },

               //请求成功之后的回调函数,监听事件
               success:function (obj){

                   if (obj == "1"){

                       alert("登陆成功");

                       //跳转到页面
                       location.href = "http://www.baidu.com";
                   }else {

                       alert("登陆失败");

                   }

               },

               //服务端返回的数据类型text,html,json,xml
               dataType:"text"

           })


       })

   })

</script>

<body>
<table align="center" border="1px">
    <tr align="center">
        <td colspan="2"><h3>用户登录</h3></td>
    </tr>
    <tr>
        <td>
            请输入用户名
        </td>
        <td>
            <input type="text" id="username" value=""><br>
        </td>
    </tr>
    <tr>
        <td>
            请输入密码
        </td>
        <td>
            <input type="password" id="password" value=""><br>
        </td>
    </tr>
    <tr align="center">
        <td colspan="2">
            <input type="button" value="提交">
        </td>
    </tr>
</table>


</body>
</html>

jQuery中封装的ajax以JSON串的形式存值

一些关键的key与value:

KEY VALUE
url 后端资源地址
type “GET”、”POST”…
data 提交到后端的数据(JSON串){username : username, password : password}
success 服务器反馈数据成功后执行的方法 function (object接收后端的参数){方法体}
dataType 服务端返回的数据类型text,html,json,xml “text”

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 1300452403@qq.com

赏

文章标题:Ajax

字数:1.7k

本文作者:Os467

发布时间:2022-07-17, 12:07:22

最后更新:2022-09-05, 00:04:26

原始链接:https://os467.github.io/2022/07/17/Ajax/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏