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 对象的 responseTextresponseXML 属性。

属性 描述
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" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏