深入了解ajax(图文详解)

深入了解ajax(图文详解)

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 内容自动补全:

不管时专注于搜索的百度,还是站点内商品搜索的淘宝,都有搜索的功能,在i搜索框输入查询关键字时,整个页面没有刷新,但会根据关键字显示相关查询字条,这个过程是异步的。

百度的搜索补全功能:

7cafa48e7d75abf32ef9cb3819d5bc2.png

淘宝的搜索补全功能:

881bd782f0006a695e20828e4929de2.png

 1.3 同步方式与异步方式的区别:

同步方式发送请求:发送一个请求,需要等待响应返回,然后才能够发送下一个请求,如果该请求没有响应,不能发送下一个请求,客户端会一直处于等待过程中。异步方式发送请求:发送一个请求,不需要等待响应返回,随时可以再发送下一个请求,即不需要等待。

 36567269de16789005f6c7a53c53c61.png

 1.4 Ajax的原理分析:

4bb438cdcb32d09cd20e8a1a986e699.png

AJAX引擎会在不刷新浏览器地址栏的情况下,发送异步请求:使用JavaScript获取浏览器内置的AJAX引擎(XMLHttpRequest对象)使用js确定请求路径和请求参数AJAX引擎对象根据请求路径和请求参数进行发送请求服务器接收到Ajax引擎的请求进行处理:服务器获得请求参数数据服务器处理请求业务(调用业务层代码)服务器响应数据给Ajax引擎Ajax引擎获得服务器响应的数据,通过执行JavaScript的回调函数将数据更新到浏览器页面的具体位置:通过设置给Ajax引擎的回调函数获取服务器响应的数据使用JavaScript在指定的位置,显示响应的数据,从而局部修改页面的数据,达到局部刷新的目的。

2.1js原生的Ajax:

js原生的Ajax开发步骤:

创建Ajax引擎对象

为Ajax引擎对象绑定监听(监听服务器已将数据响应给引擎)

绑定提交地址

发送请求

监听里面处理响应数据

nbsp;html>        Title                    //同步请求点击事件        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();        }    

登录后复制

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(图文详解)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2727073.html

(0)
上一篇 2025年3月7日 23:40:47
下一篇 2025年2月24日 19:18:23

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 弄懂promise、async、await

    上一篇呢,主要是聊了聊同步、异步,他们各自引申出来的‘执行栈’、‘消息队列’,以及‘宏任务’、‘微任务’,如果大家对这几个概念不太了解,可以去这个链接: https://www.jianshu.com/p/61e7844e68d8 宏任务与…

    编程技术 2025年3月7日
    200
  • 正则表达式在javascript中怎么使用?

    本节讲正则表达式在js中的使用,注意正则对象是一个引用类型。 初始化:字面量和对象使用 与对象的定义一样,我们可以使用字面量定义正则表达式,也可以使用正则对象来定义正则表达式,他们的区别是使用的转义有一定差别。 在使用字面量的时候,使用/ …

    2025年3月7日 编程技术
    200
  • 一文谈谈JavaScript和ECMAScript的关系

    JS和ES 每一个学习JS的同学都听说过ES5,ES6,但是,是否所有的同学都清除的知道他们之间的关系呢?我们通常认为这两个是一个东西,事实上他们的关系如下:从上面的图中我们清除的看到,他们不是并列关系,而是包含关系,那么下面就分别介绍一下…

    2025年3月7日
    200
  • 了解JS中的执行上下文、 执行栈、事件循环

    本篇文章带大家了解一下javascript中的执行上下文和执行栈、事件循环。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 下面的这些概念,无论是执行上下文、 还是执行栈,它在规范中的概念都很抽象,很多内容的理解实际靠的都…

    2025年3月7日 编程技术
    200
  • 聊聊JavaScript人脸识别技术

    我一直对人工智能识别技术非常感兴趣,因为我无法想象这究竟是一种什么样的算法,什么样的分析过程。无论是声音识别、人脸识别或其它种识别,人们的外貌、说话的方式都是如此不同,一种图片你可以用不同的方式、从不同的角度拍摄,我不能理解这些识别技术是如…

    2025年3月7日
    200
  • javascript调试之console.table()

    昨天我了解到Chrome调试工具一个小巧的调试方法,在WDCC期间, Marcus Ross(@zahlenhelfer) 介绍了,chrome调试工具各种调试方法,这个只是其中一种,现在我来给大家秀下。 用CONSOLE.LOG()展示数…

    2025年3月7日 编程技术
    200
  • Web程序员必备 Console 对象里的九个方法

    一、显示信息的命令     nbsp;html>                常用console命令                         console.log('hello'); console.i…

    2025年3月7日 编程技术
    200
  • WEB程序员必备之 关于<script>标记的一些小知识

    <img src="D:pic/2025-03-07/https://cdn.chuangxiangniao.com/2025/03/20250308225128218.jpg" alt="WEB程序员必…

    2025年3月7日
    200
  • 手把手带你了解Javascript中变量和词法环境

    其实,我觉得Javascript核心中重要的东西并非是从旧版本扩展来的高大上的语法,例如解构赋值啊、展开语法和剩余参数(嘛……虽然的确是很666),但是用好这些,其实都建立在你对变量的认识上(常有人不知道什么是左值或右值的区别)正因如此,我…

    2025年3月7日
    200
  • 学习JavaScript之手机振动API

    现代浏览器里提供的新的API越来越倾向于移动手机应用,而不是传统的桌面应用,比如JavaScript地理位置信息API。另外一个只针对手机应用的JavaScript API就是振动(Vibration) API。很明显,这个API就是允许m…

    2025年3月7日
    200

发表回复

登录后才能评论