Ajax 入门

前端技术:在浏览器中执行的程序都是前端技术。如 html、css、js 等

后端技术:在服务器中执行的长须,使用 Java 等语言开发的后端程序。servlet,jsp,jdbc,mysql,tomacat 等

全局刷新

  • 使用表单 form,超链接 href 等发起的请求属于全局刷新
  • 用户发起请求,视图改变,跳转视图。使用新的数据添加到页面

缺点:

  • 数据量大,占据网络带宽
  • 浏览器需要重新渲染整个页面
  • 用户体验不是很好

局部刷新

  • 在当前页面中发送请求,获取数据,更新当前页面的 DOM 对象
  • 对视图部分刷新

特点:

  • 数据量小,在网络中传输速度快
  • 更新部分页面内容,浏览器不用全部渲染视图
  • 在一个页面中,可以设置多个局部刷新
  • 从服务器获取的是数据,拿到更新的视图

原理:

  • 不能由浏览器发送请求给服务端
  • 浏览器委托浏览器内存中的一个脚本对象代替浏览器发送请求
  • 这个行为导致服务器端直接将【响应包】发送到脚本对象内存中
  • 这个行为导致脚本对象内容被覆盖掉,但是此时浏览器内存中绝大部分数据并没有更新

异步请求对象

  • 在进行局部刷新时,需要创建一个对象,代替浏览器发送请求的行为,这个对象存在内存中
  • 代替浏览器发起请求并接收响应数据的对象,就是异步请求对象 XMLHttpRequest
  • 存在于浏览器内部的一种 JavaScript 对象
  • 各大浏览器都能支持异步对象的使用

全局刷新是同步行为。局部刷新是一部行为(浏览器中的数据并没有全部更新)

这个异步对象用于在后台与服务器交换数据。

异步对象 XMLHttpRequest

异步对象的创建和使用:

  • JS 中的一种对象,使用 JavaScript 语法创建和使用这个对象
var xhr = new XMLHttpRequest();
  • 之后就可以使用 xhr 对象的属性或者函数,进行异步对象的操作

使用异步对象实现局部刷新,异步对象主要负责发起请求,传递请求的参数,并从服务器接收数据

局部刷新需要使用的技术:

  • JavaScript:创建 XMLHttpRequest 对象,调用它的属性或者方法
  • DOM:处理 DOM,更新数据
  • CSS:处理视图,更新美化
  • servlet:服务器端技术
  • 数据格式:json,xml

以上技术的综合使用称为 Ajax (Asynchronous JavaScript and XML,异步的 JavaScript 和 XML)

Ajax

  • Ajax (Asynchronous JavaScript and XML,异步的 JavaScript 和 XML)
  • Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分页面内容的新方法
  • Ajax 不是新的编程语言,是多种技术的综合使用
  • 包含了 JavaScript,dom,CSS,服务器端技术,servlet,jsp,jdbc 等,还有 json 数据格式

Ajax 的主要目的:实现局部刷新

Ajax 核心是 JavaScript 和 XML / json:使用JavaScript 操作异步对象XMLHttpRequest,与服务器端交互使用 json 数据格式

异步对象的属性和方法

创建异步对象,使用 JS 语法

  • var xhr = new XMLHttpRequest();

异步对象方法

open()

  • open(请求方式,服务器端的访问地址,异 / 同步);
  • 例如:xhr.open('get', 'loginServlet', true);

send()

  • 使用异步对象发送请求

异步对象属性

readyState 属性

请求的状态

  • 创建异步对象 new XMLHttpRequest() 时,readyState 的值为 0
  • 执行 open() 方法时,初始对象的请求参数 readyState 为 1
  • 使用 send() 方法发送请求时,readyState 为 2
  • 使用异步对象从服务器端接收数据,readyState 为 3
  • 异步对象接收了数据,并在异步对象内部处理完成后,readyState 为 4

status 属性

网络的状态,和 http 的状态码相对应

  • 200:请求成功
  • 404:服务器资源没有找到
  • 500:服务器内部代码出错

responseText 属性

表示服务器端返回的数据

  • var data = xhr.responseText;
  • data 的值为接收到的服务器端的数据
  • 拿到的数据可以用来更新 DOM 对象,返回结果

异步对象的使用步骤

  1. 创建对象:var xhr = new XMLHttpRequest();
  2. 绑定事件处理函数:事件名称 onreadystatechange(在绑定事件中做什么,根据 readyState 值做请求的处理)
  3. 初始化请求参数,执行 open() 函数
  4. 发送请求,执行 send() 
    <script>
        // 异步对象做请求的处理工作
        // 从浏览器内部完成请求的发送
        // 1.创建对象
        var xhr = new XMLHttpRequest();
        // 2.绑定事件处理函数
        xhr.readyStatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                // 从服务器端获取到数据
                // 更新当前页面的 DOM 对象,完成请求处理
                var data = xhr.responseText;
                // 更新 DOM 对象
                document.getElementById('mydiv').innerHTML = data;
            }
        }

        // 3.初始化请求的参数,执行 open() 函数
        xhr.open('get', 'loginServlet', true);
        // 4.发送请求,执行 send()
        xhr.send();
    </script>

原生 Ajax

Ajax 简介

Ajax 全称为 Asynchronous JavaScript and XML,异步的 JavaScript 和 XML

通过 Ajax 可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据

Ajax 不是新的编程语言,而是一种将现有标准组合在一起使用的新方式

XML 简介

XML 可扩展标记语言

XML 被设计用来传输和存储数据

XML 和 HTML 类似,不同的是 HTML 中都是预定义标签,而 XML 中没有预定义标签,都是自定义标签,用来表示一些数据

现在已经被 json 取代

Ajax 的特点

Ajax 的优点

  • 可以无需刷新页面而与服务器进行通信
  • 允许根据用户事件来更新部分页面内容

Ajax 的缺点

  • 没有浏览历史,不能回退
  • 存在跨域问题(同源)
  • SEO 不友好

HTTP 协议请求报文和响应文本格式

HTTP (hypertext transport protocol)协议【超文本传输协议】,协议详细规定了浏览器和万维网服务器之间互相通信的规则

请求报文

重点是格式与参数:

1. 请求行:

  • 包括三部分:请求类型(GET,POST);URL 路径;版本 HTTP/2.0

2. 请求头:

  • host:atguigu.com
  • Coolie:name=guigu
  • Content-type:application/x-www-form-urlencoded;

3. 空行

4. 请求体

响应报文

Ajax 的使用

核心对象

XMLHttpRequest,Ajax 的所有操作都是通过该对象进行的

使用步骤

1. 创建 XMLHttpRequest 对象

  • var xhr = new XMLHttpRequest();

2. 设置请求信息

  • xhr.open(method, url);
  • 可以设置请求头,一般不设置
  • xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

3. 发送请求

  • xhr.send(body); 
  • get 请求不传 body 参数,只有 post 请求使用

4. 接收响应

  • xhr.responseXML  接收 xml 格式的响应数据
  • xhr.responseText   接收文本格式的响应数据
    <script>
        xhr.readyStatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                // 从服务器端获取到数据
                // 更新当前页面的 DOM 对象,完成请求处理
                var data = xhr.responseText;
                // 更新 DOM 对象
                document.getElementById('mydiv').innerHTML = data;
            }
        }
    </script>

封装 Ajax 请求

function ajaxPromise() {
  let promise = new Promise((resolve, reject) => {
    let xhr = new XMLHttpRequest()
    xhr.open('get', url, true)
    xhr.onreadystatechange = () => {
      if (xhr.readyState === 4) {
        if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {
          resolve(xhr.responseText)
        } else {
          reject(new Error(xhr.statusText))
        }
      }
    }
    xhr.send(null)
  })
  return promise
}

解决 IE 缓存问题

问题:在一些浏览器中(IE),由于缓存机制的存在,Ajax 只会发送第一次请求,剩余多次请求不会再发送给浏览器而是直接加载缓存中的数据

解决方法:浏览器的缓存是根据 url 地址来记录的,所以我们只需要修改 url 地址即可避免缓存问题

xhr.open("get", "/testAjax?t=" + Data.now());

Ajax 请求状态

XMLHttpRequest.readyState - Web API 接口参考 | MDN

xhr,readyState 可以用来查看请求当前的状态

  • 0:表示 XMLHttpRequest 实例已经生成,但是 open() 方法还没有被调用
  • 1:表示 send() 方法还没有被调用,仍然可以使用 setRequstHeader(),设定 HTTP 请求的头信息
  • 2:表示 send() 方法已经执行,并且头信息和状态码已经收到
  • 3:表示正在接收服务器传来的 body 部分的数据
  • 4:表示服务器数据已经完全接收,或者本次接收已经失败

JQuery 中的 Ajax

get 请求

$.get(url,[data],[callback],[type])

  • url:请求的 URL 地址
  • data:请求携带的参数
  • callback:载入成功时回调函数
  • type:设置返回内容格式:xml,html,script,json,text,_default

post 请求

$.post(url,[data],[callback],[type])

  • url:请求的 URL 地址
  • data:请求携带的参数
  • callback:载入成功时回调函数
  • type:设置返回内容格式:xml,html,script,json,text,_default

跨域

同源策略

同源策略(Same-Origin Policy)最早由 Netscape 公司提出,是浏览器的一种安全策略

同源:协议、域名、端口号必须完全相同

违背同源策略就是跨域

如何解决跨域

JSONP

1. JSONP是什么

  • JSON with Padding
  • 一个非官方的跨域解决方案,纯粹凭借程序员的聪明才智开发出来,只支持 get 请求

2. JSON 怎么工作的

  • 在网页有一些标签天生具有跨域功能,比如 img,link,iframe,script
  • JSONP 就是利用 script 标签的跨域能力来发送请求的

3. JSONP 的使用

  1. 动态的创建一个 script 标签
  2. 设置 script 的 src,设置回调函数
  3. 将 script 添加到 body 中
  4. 服务器中路由的处理
    <script>
        // 动态的创建一个 script 标签
        var script = document.createElement("script");

        // 设置 script 的 src,设置回调函数
        script.src = "http://localhost:3000/testAJAX?callback=abc";

        function abc() {
            alert(data.name);
        }

        // 将 script 添加到 body 中
        document.body.appendChild(script);

        // 服务器中路由的处理
        router.get("/testAJAX", function(req, res) {
            console.log("收到请求");
            var callback = req.query.callback;
            var obj = {
                name: "孙悟空",
                age: 18
            }
            res.send(callback + "+JSON.stringify(obj)+");
        });
    </script>

4. JQuery 中的 JSONP 

<body>
    <button id="btn">按钮</button>
    <ul id="list"></ul>
    <script type="text/javascript" src="./jquery-1.12.3.js"></script>
    <script type="text/javascript">
        window.onload = function() {
            var btn = document.getElementById('btn');
            btn.onclick = function() {
                $.getJSON("http://api.douban.com/v2/movie/in_theater?callback=?", function(data) {
                    console.log(data);
                    // 获取所有电影条目
                    var subjects = data.subjects;
                    // 遍历电影条目
                    for (var i = 0; i < subjects.length; i++) {
                        $("#list").append("<li>" +
                            subjects[i].title + "<br/>" +
                            "<img src=\"" + subjects[i].images.large + "\">" +
                            "</li>")
                    }
                });
            }
        }
    </script>
</body>

CORS

跨源资源共享(CORS) - HTTP | MDN

CORS 是什么

CORS(Cross-Origin Resource Sharing),跨域资源共享

CORS 是官方的跨域解决方案,它的特点是不需要在客户端做任何特殊的操作,完全在服务器中进行处理,支持 get 和 post 请求

跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源

CORS 怎么工作的

CORS 是通过设置一个响应头来告诉浏览器,该请求允许跨域,浏览器收到该响应以后就会对响应放行

CORS 的使用

主要是服务器端的设置:

    <script>
        router.get("/testAJAX", function(req, res) {
            // 通过 res 设置响应头,允许跨域请求
            // res.set("Access-Control-Allow-Origin", "http://127.0.0.1:3000");
            res.set("Access-Control-Allow-Origin", "*");
            res.send("textAJAX 返回的响应");
        });
    </script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/4770.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分享:从ChatGPT给到的数据库故障案例,看开发协同未来趋势

欢迎访问 OceanBase 官网获取更多信息&#xff1a;https://www.oceanbase.com/ 本文来自OceanBase社区分享&#xff0c;仅限交流探讨。原作者陈小伟。 我是陈小伟&#xff0c; 2019 年加入 OceanBase&#xff0c;目前负责 OceanBase 开发者中心的研发。 OceanBase ODC 这几年从…

200.Spark(七):SparkSQL项目实战

一、启动环境 需要启动mysql,hadoop,hive,spark。并且能让spark连接上hive(上一章有讲) #启动mysql,并登录,密码123456 sudo systemctl start mysqld mysql -uroot -p#启动hive cd /opt/module/ myhadoop.sh start#查看启动情况 jpsall#启动hive cd /opt/module/hive/…

为了开放互联,明道云做了十件事

本文来自明道云资深研发经理孙伟&#xff0c;在明道云2022年秋季伙伴大会活动演讲&#xff0c;经校对编辑后整理为演讲精华。 一、开放没有选择 很多客户选择我们的一个重要原因&#xff0c;是明道云所能提供的产品开放能力。开放其实是没有选择的&#xff0c;坦白来讲&#…

SM3哈希算法的FPGA实现 I

SM3哈希算法的FPGA实现 I SM3哈希算法的FPGA实现 I一、什么是SM3哈希算法&#xff1f;二、SM3哈希算法的具体内容1、填充2、迭代与压缩3、计算拼凑值三、参考文档语言 &#xff1a;verilog 仿真工具&#xff1a; Modelsim EDA工具&#xff1a;quartus II 一、什么是SM3哈希算法…

【Unity 手写PBR】Build-in管线:实现间接光部分

写在前面 直接光昨天已经实现了&#xff1a;【Unity Shader】Build-in管线实现PBR&#xff1a;直接光部分&#xff0c;今天趁热打铁&#xff0c;补完剩下的间接光计算。 1 补一个法线纹理 突然法线直接光部分忽略了法线纹理应用的部分&#xff0c;这当然也是不可或缺的部分&a…

基于springboot实现家政服务管理平台【源码+论文】

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 摘要 随着家政服务行…

《Netty》从零开始学netty源码(十七)之AbstractUnsafe

NioServerSocketChannel的父类AbstractChannel调用newUnsafe方法创建AbstractNioUnsafe&#xff0c;newUnsafe直接调用NioMessageUnsafe的无参构造函数创建实例&#xff0c;该构造函数是java默认的构造函数&#xff0c;过程如下&#xff1a; NioMessageUnsafe的结构图如下&am…

2023年湖北省建筑八大员(建设厅七大员)报考流程和拿证流程来咯!

2023年湖北省建筑八大员&#xff08;建设厅七大员&#xff09;报考已经开始&#xff0c;想要快速拿证的联系甘建二 湖北省建筑八大员报名和拿证简单吗&#xff1f;怎么报考&#xff1f;甘建二告诉你 1、湖北省建筑八大员建设厅七大员考试岗位&#xff1a;施工员、质量员、材料员…

推荐一款自动生成财务报表分析的软件

财务报表能够清晰的反映一个企业的经营状况&#xff0c;通过三大财务报表的资产负债表、利润表、现金流量表&#xff0c;能够清晰的揭示企业经营中存在的问题&#xff0c;也是税务局要求企业报税的必备财务报表。但是&#xff0c;会计手工编制财务报表&#xff0c;费时费力&…

中介变量、调节变量与协变量

在平时看论文过程中偶会接触到这几个概念&#xff0c;然而都没想过弄明白&#xff0c;每次总觉得只要看明白个大概反正自己又不用这种方法…作为科研人&#xff0c;还是应该保持谦逊&#xff0c;保持学习 一、中介变量 1.概念 中介变量&#xff08;mediator&#xff09;是自…

人事文件签署单调、重复、繁重?君子签电子合同提升HR工作质效

人事文件作为企业管理中最常见、最频繁也是最常用的签署文件&#xff0c;使用安全合规、高效便捷的电子化签署方式&#xff0c;可以帮助HR从大量单调、重复、繁重的人事管理事务中解放出来&#xff0c;优化人事管理流程&#xff0c;提升管理效率。 君子签围绕企业员工“招聘、入…

Ajax:服务器的基本概念与初识Ajax

Ajax&#xff1a;服务器的基本概念与初识Ajax Date: January 19, 2023 目标 能够知道和服务器相关的基本概念 能够知道客户端和服务器通信的过程 能够知道数据也是一种资源 能够说出什么是Ajax以及应用场景 能够使用jQuery中的Ajax函数请求数据 能够知道接口和接口文档的…

怎么将pdf压缩?pdf文件如何压缩?

pdf文件如果过大的话&#xff0c;容易导致传送失败&#xff0c;最简单的办法就是通过pdf在线压缩的方法去将pdf压缩&#xff08;https://www.yasuotu.com/pdfyasuo&#xff09;&#xff0c;但是一般的压缩软件会损害dpf文件质量&#xff0c;所以有没有pdf无损压缩的方法呢&…

即时零售:不可逆的进化

“人们经常问我&#xff0c;这个世界还是平的吗&#xff1f;我经常跟他们说&#xff0c;亲爱的&#xff0c;它真的是平的&#xff0c;比以前更平了。”2021年3月&#xff0c;《世界是平的》作者托马斯弗里德曼在演讲时说。如他所说&#xff0c;尽管逆全球化趋势加剧&#xff0c…

【WEB前端进阶之路】 HTML 全路线学习知识点梳理(下)

前言 本文是HTML零基础小白学习系列的第三篇文章&#xff0c;点此阅读 上一篇文章 文章目录前言十五.HTML布局1.使用div元素添加网页布局2.使用table元素添加网页布局十六.HTML表单和输入1.文本域2.密码字段3.单选按钮4.复选框5.提交按钮十七.HTML框架1.iframe语法2.iframe设置…

Air700E开发板|移芯EC618|4G Cat.1模组:概述及PinOut

文章目录基础资料概述主要功能外设分布PinOut&#xff08;管脚定义&#xff09;管脚功能说明固件升级正常开机模式&#xff1a;下载模式&#xff1a;IO 电平选择基础资料 Air700E文档中心 概述 EVB-Air700E 开发板是合宙通信推出的基于 Air700E 模组所开发的&#xff0c;包含…

vue3+SpringBoot+postgresql 项目前后端传参

【项目大纲】&#xff1a;vue3SpringBootpostgresql 简单实现项目前后端传参&#xff1a; 使用postgresql数据库&#xff0c;前端使用vue3vitets&#xff0c;后端使用SpringBoot框架。目录 一、postgresql数据库 二、vue3vite部分 1 main.ts 2 App.vue 3 myTable.vue测试页…

Java 接口过滤为null 的字段

一、问题描述今天在大C的同学找过来给我们提了个技术需求&#xff0c;让我们将接口里返回的字段全不做一下处理&#xff0c;若字段值为 "null" 的时候就不要返回了&#xff0c;他们APP会崩溃。what ? 我想大家立刻马上会冒出这样一个问题之前不是好好的么这么突然就…

19. 添加异步日志——3.继续完善

1.添加日志滚动功能。 为了防止日志文件过大&#xff0c;我们在日志文件大小到达预定的大小后&#xff0c;就要新创建一个日志文件来使用,或者通过时间&#xff08;每天零点&#xff09;去新建一个文件。 一个典型的日志文件的文件名如下&#xff1a; logfile_test.20221122…

限流的几种方案

文章目录 限流基本概念 QPS和连接数控制传输速率黑白名单分布式环境 限流方案常用算法 令牌桶算法漏桶算法滑动窗口 常用的限流方案 Nginx限流中间件限流限流组件合法性验证限流Guava限流网关层限流 从架构维度考虑限流设计 具体的实现限流的手段&#xff1a; Tomcat限…
最新文章