阶段五-Day03-Ajax

一、JavaWeb中路径的说明

1. JavaWeb中的路径

在JavaWeb中, 路径分为相对路劲和绝对路径两种:

相对路径: 

        ./  表示当前目录

        ../  表示当前文件所在目录的上一级目录

绝对路径:

        完整的路径名

2. 在JavaWeb中/的不同意义

/斜杠如果被浏览器解析,得到的是

协议+本地ip+端口号

http://ip:port/

/斜杠如果被服务器解析, 得到是

协议+本地ip+端口号+项目路径

http://ip:port/工程路径/

  • 特殊情况:response.sendRedirect(“”);服务器不解析,把斜杆发给浏览器去解析,得到http://ip:port/

二、AJAX

1. 之前浏览器和服务器交互的请求发送方式

浏览器和服务器进行数据交互的基本流程为: http://localhost:8080/Ajax_war_exploded/PathServlet

1.浏览器发起http请求

2.服务器收到请求,对请求进行解析,创建请求和响应对象

3.服务器根据请求解析结果调用对应的资源处理请求

4.服务器将处理结果响应给浏览器

5.浏览器收到响应结果,对结果数据进行解析

6.浏览器将解析后的数据展示在页面

浏览器发送请求的方式:

1.在浏览器地址栏输入url地址后回车

2.使用超链接

3.使用form表单

4.在js代码中使用window.location.href(在当前页面打开,window可以省略)

5.在js代码中使用windows.open()(在新标签打开,window可以省略)

2.浏览器发送请求访问服务器方式存在的问题

新的响应结果会覆盖之前的内容

3. Ajax的介绍和使用

3.1 介绍

概念:

Ajax(Asynchronous Javascript And XML)是由浏览器解析运行的基于JavaScript实现的网页局部刷新的技术。

作用:

实现了在当前网页中显示新的响应内容。(不会覆盖掉原有内容)

特点:

  1. 一种新的让浏览器发起http请求的技术

  2. 使用ajax发起的请求,响应结果不会自动的覆盖原有内容,而是可以在原有页面内容上继续显示

  3. Ajax是一门基于JavaScript的技术,由浏览器解析运行,所以是一种前端(客户端)技术

  4. 简单易用

3.2 ajax发送请求
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><!--传统请求:1.地址栏发起请求2.超链接发起请求3.location.href发起请求4.form发起请求5.window.open()方法(是在新标签页打开)缺点: 发起请求后,响应回来的内容覆盖原有的页面简单理解: document对象直接发起的请求, 响应回来什么内容,页面就会显示什么内容ajax请求:页面不变的情况下,发送请求,获取响应数据,将响应数据完成局部刷新ajax属于js的技术简单理解:xhr对象发起请求,页面不变--><script>function f() {//1.创建xhr对象var xhr = new XMLHttpRequest();//2.开启连接xhr.open("get","AServlet");//3.发起请求xhr.send();//4.监听readyState(状态码)的变化事件//,一旦readyState发生变化,启动函数执行xhr.onreadystatechange = function () {/** readyState:*   0:创建了xhr对象,还没有连接*   1:建立了连接,还没有发送请求*   2:发送了请求,服务端开始处理*   3:服务器响应,但没有响应完(通常仅完成了响应头中数据的处理)*   4:服务器完成了完整的响应* *///readyState为4,服务端完整响应。 响应状态码为200,成功响应。if (xhr.readyState == 4 && xhr.status == 200){//xhr.responseText(响应回来的文本)console.log(xhr.responseText);document.getElementById("sp").innerText = xhr.responseText;}}}</script>
</head>
<body>
<h3>ajax01.html</h3>
<button onclick="f()">请求</button>
<br>
<span id="sp"></span>
</body>
</html>

定义一个方法:

1.创建ajax请求对象

var xhr = new XMLHttpRequset()

2.开启连接

请求方式,请求路径

xhr.open("get","testServlet")

3.发起请求

xhr.send()

4.监听就绪状态码的变化

xhr.onreadystatechange = function(ev){

        if (xhr.readyState == 4 && xhr.status == 200){

                //获取响应数据

                var responseText = xhr.responseText

        }

}

4. 同步与异步请求

同步请求:

  • 发送请求后,一直等待服务端的响应,获取到服务端响应后,再执行其他的逻辑代码。

    • 浏览器直接发起

      • 在浏览器地址栏输入url,发起请求

      • 使用超链接,发起请求

      • 使用form表单,发起请求

      • 在js代码中使用window.location.href,发起请求

    • ajax发起同步请求,有xhr对象发起请求

      • ajax与其他方式发送同步请求的区别: ajax可以局部刷新(由xhr对象发送请求),其他的请求方式会刷新整张页面

异步请求:

  • 发送请求后,不需要等待服务端的响应,继续按照顺序执行其他逻辑代码,监听到响应,自动调用指定的方法。

5. Ajax的同步和异步设置

Ajax执行步骤:

  1. 创建Ajax请求对象

  2. 建立连接

  3. 发送连接

  4. 监听状态变化及结果处理

设置ajax的同步异步:

通过设置Ajax请求对象open方法的async参数的值:

true:表示异步,默认值

false:表示同步

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script>function f() {location.href = "CServlet";}//ajax发起同步请求function f1() {var xhr = new XMLHttpRequest();//默认是true,异步请求xhr.open("get","CServlet",false);xhr.send();var responseText1 = xhr.responseText;console.log("同步请求")console.log(responseText1);}//ajax发起异步请求function f2() {var xhr = new XMLHttpRequest();//默认是true,异步请求xhr.open("get","CServlet");xhr.send();//监听xhr.onreadystatechange = function () {if (xhr.readyState == 4 && xhr.status == 200){var responseText2 = xhr.responseText;console.log(responseText2);}}console.log("异步请求");}</script>
</head>
<body>
<!--同步请求: 浏览器发送请求之后,一直等待服务器的响应,服务器响应完成后,才继续向下执行比如:1.地址栏直接发起的请求2.超链接发起请求3.form表单发起请求4.location.href发起请求ajax也可以发送同步请求: 但是页面不变,局部刷新异步请求: 浏览器发送请求后,不需要等待服务器的响应,继续执行其他代码,服务器响应后会有结果可以是函数的执行
-->
<a href="CServlet">超链接</a>
<hr>
<form action="CServlet"><input type="submit">
</form>
<hr>
<button onclick="f()">location.href</button>
<hr>
<a href="javascript:void(0)" onclick="f1()">ajax同步请求</a>
<hr>
<a href="javascript:void(0)" onclick="f2()">ajax异步请求</a>
</body>
</html>

6. Ajax的get请求和post请求及请求参数

6.1 Ajax设置get请求方式及携带请求参数:

Ajax的get请求的请求参数是直接写在请求路径后面

使用?拼接,多个参数中间使用&隔开

HelloServlet?name=lucy&age=18

6.2 Ajax设置post请求方式及携带请求参数:

Ajax的post请求传递参数是需要单独写在send方法中,而且需要设置请求头,该请求头表示此次请求是以表单的方式提交

 //请求方式是post请求,则需要设置请求头,这个请求头就表示是以表单方式提交数据
      xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      xhr.send("name=lily&age=15");

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script>function f1() {//get方法传递参数var xhr = new XMLHttpRequest();xhr.open("get","DServlet?uname=zs&pwd=123");xhr.send();xhr.onreadystatechange = function () {if (xhr.readyState == 4 && xhr.status == 200){var text = xhr.responseText;console.log(text);}}}function f2() {//post方法传递参数var xhr = new XMLHttpRequest();xhr.open("post","DServlet");//必须设置请求头xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")xhr.send("uname=ww&pwd=456");xhr.onreadystatechange = function () {if (xhr.readyState == 4 && xhr.status == 200){var text = xhr.responseText;console.log(text);}}}</script>
</head>
<body>
<body>
<button onclick="f1()">get请求及传参</button>
<br>
<button onclick="f2()">post请求及传参</button>
<br>
<form action="aa" method="post"><input type="submit">
</form>
</body>
</body>
</html>

7. Ajax请求的响应数据格式及处理(重点)

使用json数据格式(特殊格式的字符串, 和js对象格式一致),它比较方便简单,而且也有好用的json工具包。json格式在浏览器可以直接解析成对象格式

Java对象的json字符串格式:

  • 普通Java对象的json字符串格式:

    User user = new User(1, "张三丰", 18, "北京");
    ​
    {"id":1, "name":"张三丰", "age": 18, "address":"北京"}
  • Map集合对应的json字符串格式:

    Map<String, Object> map = new HashMap<>();
    map.put("key1", "value1");
    map.put("key2", "value2");
    ​
    {"key1":"value1", "key2":"value2"}
  • List集合对应的json字符串格式:

    List<User> list = new ArrayList<>();
    list.add(new User(1, "赵敏", 18, "北京"));
    list.add(new User(2, "周芷若", 28, "上海"));
    ​
    [{"id":1, "name":"赵敏", "age":18, "address":"北京"},{"id":2, "name":"周芷若", "age":28, "address":"上海"}
    ]

Ajax获取响应数据的方式:var 变量名 = xhr.responseText;

  1. 获取到的是普通字符串数据:直接使用

  2. 获取到的是json格式的字符串:使用js的eval()函数,将json格式的字符串转换为js对象

三、 jQuery封装的Ajax的使用

  • 第一种:

    $.ajax({type:“请求方式”,url:“请求地址”,data:“请求参数”,dataType:"服务器返回的数据类型"success:fundction(data){ //成功且完整响应自动调用的函数},error: function(){ //出现错误自动调用的函数}
    })

    dataType:用来指定服务器返回来的数据类型,可选值有如下:

    • xml:表示服务器返回的是xml内容

    • html:表示服务器返回的是html文本内容

    • script:表示服务器返回的是script文本内容

    • json:表示服务器返回的是json内容(重点)

    • jsonp:表示使用jsonp形式调用函数,早期我们用它来解决跨域问题

    • text:表示服务器返回的是纯文本字符串

  • 第二种:

    • $.get(“请求地址”,“请求参数”,回调函数, 返回的数据类型)

    • $.post(“请求地址”,“请求参数”,回调函数, 返回的数据类型)

回调函数主要是用来处理服务器对我们的响应结果。

返回的数据类型这个参数用来设置服务器返回来的数据类型,可以是xml, html, script, json, text。

  • 第三种:

    • $.getJSON("请求地址", "请求参数", "回调函数")

这种方式要求服务器返回的数据类型得是json格式的。

  • 第四种:

    • $.getScript("请求地址", "回调函数")

    这种方式是发送ajax请求获取一个js文件。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十二章:泛型(Generic)

1&#xff1a;为什么要有泛型&#xff1f; 泛型&#xff1a;&#xff08;标签&#xff09;允许在定义类、接口时候通过一个标识来表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型、参数将在使用时&#xff08;例如&#xff1a;继承或实现这个接口&#xff0…

QML 带框最大化显示方法

1.QML窗口最大化很多会给出如下方法: visibility: "FullScreen" 此方法不好的方面是没有最大化&#xff0c;最小化&#xff0c;关闭按钮 2.通过showMaximized() 方法可以满足我们需求:在onCompleted 方法中执行 实现的效果如下:

QT基础入门——界面布局和常用控件(四)

前言&#xff1a; 所谓 GUI 界面&#xff0c;归根结底&#xff0c;就是一堆组件的叠加。我们创建一个窗口&#xff0c;把按钮放上面&#xff0c;把图标放上面&#xff0c;这样就成了一个界面。在放置时&#xff0c;组件的位置尤其重要。我们必须要指定组件放在哪里&#xff0c…

妙鸭相机功能代码复现

妙鸭相机功能代码复现 妙鸭相机主要实现人脸替换与人脸高清增强修复功能。可通过两种方式实现Roop和Lora模型。 RooP笔记 基础模型:inswapper_128.onnx 人脸分析模型:insightface 高清增强模型:gfpgan 大体流程为通过insightface检测出人脸,替换人脸,使用gfpgan对人…

设计模式——14. 观察者模式

1. 说明 观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象之间的一对多依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都能够自动收到通知并更新自己的状态,以保持与被观察对象的同步。观察者模式也被称为发布-订阅模式。 观察者模式包含…

改变世界-生成式人工智能

麦肯锡在其《生成人工智能的经济潜力&#xff1a;下一个生产力前沿》中声称&#xff0c;“ChatGPT、GitHub Copilot、Stable Diffusion 等生成式人工智能应用程序以 AlphaGo 没有的方式吸引了世界各地人们的想象力&#xff0c;这要归功于它们广泛的实用性——几乎任何人都可以使…

Java中的Iterator

Java中的Iterator Iterator 是Java中的一个接口&#xff0c;它提供了一种访问集合&#xff08;如列表、集合等&#xff09;中元素的标准方式。Iterator 具有一些特点、优点和缺点&#xff0c;下面详细介绍如何使用它以及相关信息。 使用Iterator&#xff1a; 创建Iterator&am…

动态代理初步了解

准备案例 需求 模拟某企业用户管理业务&#xff0c;需包含用户登录&#xff0c;用户删除&#xff0c;用户查询功能&#xff0c;并要统计每个功能的耗时。 分析与实现 定义一个UserService表示用户业务接口&#xff0c;规定必须完成用户登录&#xff0c;用户删除&#xff0c…

2019年[海淀区赛 第2题] 阶乘

题目描述 n的阶乘定义为n!n*(n -1)* (n - 2)* ...* 1。n的双阶乘定义为n!!n*(n -2)* (n -4)* ...* 2或n!!n(n - 2)*(n - 4)* ...* 1取决于n的奇偶性&#xff0c;但是阶乘的增长速度太快了&#xff0c;所以我们现在只想知道n!和n!!末尾的的个数 输入格式 一个正整数n &#xff…

华为OD七日集训第7期 - 按算法分类,由易到难,循序渐进,玩转OD

目录 一、适合人群二、本期训练时间三、如何参加四、7日集训第7期五、精心挑选21道高频100分经典题目&#xff0c;作为入门。第1天、逻辑分析第2天、字符串处理第3天、数据结构第4天、递归回溯第5天、二分查找第6天、深度优先搜索dfs算法第7天、动态规划 六、集训总结 大家好&a…

基于Stable Diffusion的图像合成数据集

当前从文本输入生成合成图像的模型不仅能够生成非常逼真的照片&#xff0c;而且还能够处理大量不同的对象。 在论文“评估使用稳定扩散生成的合成图像数据集”中&#xff0c;我们使用“稳定扩散”模型来研究哪些对象和类型表现得如此逼真&#xff0c;以便后续图像分类正确地分配…

【C++】Stack Queue -- 详解

一、stack的介绍和使用 1、stack的介绍 https://cplusplus.com/reference/stack/stack/?kwstack 1. stack 是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。 2. stack 是作为容器适配器被…

Docker Mysql实战:docker compose 搭建Mysql

1、docker-compose-mysql文件准备 进入/home/docker目录&#xff0c;新建docker-compose-mysql.yml文件&#xff0c;内容如下&#xff1a; version: 3.0 services:mysql:image: "mysql:5.7"container_name: "mysql"environment:MYSQL_ROOT_PASSWORD: &q…

linux中命令行如何使用git

在Linux中&#xff0c;您可以使用命令行来使用Git版本控制系统。以下是一些常见的Git命令&#xff0c;用于在Linux终端中进行版本控制&#xff1a; 安装Git&#xff1a;如果您的Linux系统上还没有安装Git&#xff0c;可以使用适合您的包管理器来安装它。例如&#xff0c;在Ubu…

Java中树形菜单的实现方式(超全详解!)

前言 这篇文中&#xff0c;我一共会用两种方式来实现目录树的数据结构&#xff0c;两种写法逻辑是一样的&#xff0c;只是一种适合新手理解&#xff0c;一种看着简单明了但是对于小白不是很好理解。在这里我会很详细的讲解每一步代码&#xff0c;主要是方便新人看懂&#xff0…

从0开始python学习-31.selenium 文本输入框、下拉选择框、文件上传、时间插件选择元素定位

目录 1. 纯文本输入框 2. 存在默认值的文本输入 3. 下拉选择框 4. 输入后下拉选择框 5. 文件上传 6. 时间插件 1. 纯文本输入框 driver.find_element(By.XPATH,/html/body/div[2]/td[2]/input).send_keys(测试名称) 2. 存在默认值的文本输入 注意&#xff1a; 1. 这种存…

AQS内部的体系架构

AQS本质上是一个双向队列&#xff0c;加一个状态位state。内部靠Node节点形成队列。 AQS由state和CLH变体的虚拟双端队列组成。 AQS的内部类Node类 属性说明&#xff1a; 内部结构&#xff1a;

合并K个已排序的链表

题目 链接 描述 合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。 示例1 输入&#xff1a; [{1,2,3},{4,5,6,7}] 返回值&#xff1a; {1,2,3,4,5,6,7} 示例2 输入&#xff1a; [{1,2},{1,4,5},{6}] 返回值&#xff1a; {1,1,2,4,5,6} 题解&#xff08;合并&…

上门按摩小程序|同城上门按摩软件开发|上门按摩系统;

上门按摩小程序的开发具有许多优势&#xff0c;下面就给大家介绍下按摩小程序功能: 上门按摩小程序的优势 方便快捷&#xff1a;上门按摩小程序提供在线预约服务&#xff0c;用户可以通过手机随时随地预约按摩师上门服务&#xff0c;避免了传统预约方式的繁琐和不确定性。 个性…

TCP/IP网络协议通信函数接口

创建套接字函数 socket 【头文件】 #include <sys/types.h> #include <sys/socket.h> 【函数原型】 int socket(int domain, int type, int protocol); 【函数功能】 socket 函数创建一个通信端点&#xff0c;并返回一个引用该端点的文件描述符&#xff0c;…