百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>JS教程> 深入理解ajax(图文详解)
分享文章到:

深入理解ajax(图文详解)

发布时间:09/01 来源:未知 浏览: 关键词:

1.1 什么是ajax:

  • Ajax即“Asynchronous Javascript And XML”(异步JavaScript 和XML),是指一种创立交互式网页利用的网页开发技术。Ajax=异步JavaScript和XML(标准通用标志说话的子集)。通过在后台与效劳器停止少量数据交流,Ajax可以使用网页实现异步更新。这意味着可以在不从新加载整个网页的状况下,对网页的某部分停止更新(无刷新技术)。传统的网页(不使用Ajax)假如需要更新内容,必需重载整个网页页面。

1.2Ajax的利用场景:

1.2.1 检查会员名可否已被注册:

许多站点的注册页面都具被主动检测会员名可否存在的友好提醒,该功效团体页面并没有刷新,但依然可以异步与效劳器停止数据交流,查询会员输入的会员名可否存在数据库。

bb68bc7ced15103149d444060b021fd.png

1.2.2 省市级联下拉框联动:

许多站点都存在输入会员地址的操纵,在完成地址输入时,会员所在的省份是下拉框,中选择不一样的省份时会显现不一样市区的选中,这就是最常见的省市联动结果。

6cda28041de33f792a0902c984c6a40.png

1.2.3 内容主动补全:

不管时专心于搜索的baidu,还是站点内商品搜索的淘宝,都有搜索的功效,在i搜索框输入查询关键字时,整个页面没有刷新,但会按照关键字显示相关查询字条,这个历程是异步的。

baidu的搜索补全功效:

7cafa48e7d75abf32ef9cb3819d5bc2.png

淘宝的搜索补全功效:

881bd782f0006a695e20828e4929de2.png

1.3 同步方式与异步方式的不同:

  1. 同步方式发送恳求:发送一个恳求,需要等候响应返回,然后才能够发送下一个恳求,假如该恳求没有响应,不克不及发送下一个恳求,客户端会不断处于等候历程中。
  2. 异步方式发送恳求:发送一个恳求,不需要等候响应返回,随时可以再发送下一个恳求,即不需要等候。

36567269de16789005f6c7a53c53c61.png

1.4 Ajax的道理剖析:

4bb438cdcb32d09cd20e8a1a986e699.png

  • AJAX引擎会在不刷新阅读器地址栏的状况下,发送异步恳求:
  1. 使用JavaScript猎取阅读器内置的AJAX引擎(XMLHttpRequest对象)
  2. 使用js肯定恳求途径和恳求参数
  3. AJAX引擎对象按照恳求途径和恳求参数停止发送恳求
  • 效劳器接收到Ajax引擎的恳求停止处置:
  1. 效劳器获得恳求参数数据
  2. 效劳器处置恳求业务(调取业务层代码)
  3. 效劳器响应数据给Ajax引擎
  • Ajax引擎获得效劳器响应的数据,通过施行JavaScript的回调函数将数据更新到阅读器页面的详细位置:
  1. 通过设定给Ajax引擎的回调函数猎取效劳器响应的数据
  2. 使用JavaScript在指定的位置,显示响应的数据,从而部分修改页面的数据,到达部分刷新的目的。

2.1js原生的Ajax:

  • js原生的Ajax开发步骤:
  1. 创立Ajax引擎对象

  2. 为Ajax引擎对象绑定监听(监听效劳器已将数据响应给引擎)

  3. 绑定提交地址

  4. 发送恳求

  5. 监听里面处置响应数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css"></style>
    <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    <script type="text/javascript">
        //同步恳求点击事件
        function sendRequest() {
            //js刷地址栏恳求效劳器端
            location.href = "Ajax1Servlet?name=admin&password=123abc";
        }
        
        //异步恳求点击事件
        function sendAsynRequest() {
            //1.创立ajax引擎对象
            var xmlHttp = new XMLHttpRequest();
            //2.设定回调函数,目的是处置效劳器完全返回的数据
            xmlHttp.onreadystatechange = function () {
                /**
                 * 这个回调函数什么调取呢?是ajax引擎对象与效劳器通讯状态码改动的时候调取
                 * ajax引擎对象与效劳器通讯状态码xmlHttp.readystate,范畴0~4
                 * 0:恳求未初始化
                 * 1:效劳器连接已创立
                 * 2:恳求已接收
                 * 3:恳求处置中
                 * 4:恳求已完成,且响应已就绪
                 * 这个回调函数一共被调取4次,但只要状态码4的时候才代表效劳器响应完成数据完成。
                 * ajax引擎通讯转态码为4和http通讯转态码为200
                 */
                if(xmlHttp.readyState==4 && xmlHttp.status==200){
                    //猎取响应数据
                    var content = xmlHttp.responseText;
                    alert(content);
                }
            }
            //3.设定恳求途径和恳求参数
            /**
             * xmlHttp.open(method,url)
             * method,恳求办法,get或post恳求
             * url:恳求途径
             */
            xmlHttp.open("get","Ajax1Servlet?name=admin&psw=abc123");
            //4.发送恳求
            xmlHttp.send();
        }
    </script>
</head>
<body>
<input type="button" value="发送同步恳求" onclick="sendRequest();"/>
<input type="button" value="发送异步恳求" onclick="sendAsynRequest();"/>
</body>
</html>
package com.sunny.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "Ajax1Servlet", urlPatterns = "/Ajax1Servlet")
public class Ajax1Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //猎取恳求参数
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        //打印出来
        System.out.println("name="+name);
        System.out.println("password="+password);
        //输出数据前端
        response.getWriter().write("hello js ajax");
    }
}

2.2 Ajax引擎连接状态readyState值0~4转变历程:

30abec29331402cf0f88b5f3a30a6f3.png

  • 存有 XMLHttpRequest 的状态。从 0 到 4 发生转变。
  • 0: 恳求未初始化
  • 1: 效劳器连接已创立
  • 2: 恳求已接收
  • 3: 恳求处置中
  • 4: 恳求已完成,且响应已就绪

这里状态值4只能说明接收到了效劳器的响应效劳器处置ajax恳求完毕,但是不克不及代表准确的猎取了效劳器的响应,需要配合http状态码200两个前提就可以说明准确的猎取了效劳器响应。只要这两个前提知足,xmlhttp.responseText才可以猎取到准确的响应数据。

xmlhttp.onreadystatechange = function(){
			if(xmlhttp.readyState == 4){
				if(xmlhttp.status == 200){
					alert("响应数据" + xmlhttp.responseText);
				}
			}
		};

感激大家的阅读,但愿大家收益很多。

本文转自:https://blog.csdn.net/Huangyuhua068/article/details/82889614

引荐教程:《JS教程》

以上就是深入理解ajax(图文详解)的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板