学习AJAX必知必会(2)~Ajax基本使用,设置请求行、请求体、请求头,服务端响应JSON数据

article/2025/11/3 15:09:12

一、Ajax的基本使用

1、核心对象 XMLHttpRequest,AJAX 的所有操作都是通过该对象进行的。

2、发送ajax请求(4个步骤):

  • 创建xhr对象,然后open方法初始化,设置请求方式和请求路径,接着send方法发送请求,从而接收服务端响应回来的数据(通过绑定事件onreadystatechange
//Ajax发送get请求//1、创建XmlHttpRequset对象
const xhr = new XMLHttpRequest();
//2、通过xhr对象的open方法进行初始化,设置请求方式get和请求url,请求参数(第一个参数使用?,其余使用&)
xhr.open('get', 'http://127.0.0.1:8000/server?a=1&b=2');
//3、发送Ajax请求
xhr.send();
//4、事件绑定,处理服务端返回结果
xhr.onreadystatechange = function () {//处理前判断服务端是否返回所有结果和服务端的状态码是2**if(xhr.readyState === 4){if(xhr.status >= 200 && xhr.status < 300){//处理结果(响应行、响应头、空行、响应体)// //1、响应行// console.log(xhr.status);//状态码// console.log(xhr.statusText);//状态字符串,若成功响应式为OK// console.log(xhr.getAllResponseHeaders());//所有响应头// console.log(xhr.response);//所有响应体//将响应内容显示到dom视图result.innerHTML = xhr.response;}}
}          

onreadystatechange (on 意思是:当…的时候;readystate:是XmlHttpRequset对象的状态属性,有五个值,分别是0、1、2、3、4 )

0 未初始化
1 open方法调用完毕
2 send方法调用完毕
3 服务端返回部分结果
4 服务端返回所有结果

//Ajax发送post请求(跟get请求不同的地方:open方法第一个参数是post,然后请求参数(请求体)是设置为send方法的参数)//1、创建XmlHttpRequset对象
const xhr = new XMLHttpRequest();
//2、通过xhr对象的open方法进行初始化,设置请求方式post和请求url
xhr.open('post', 'http://127.0.0.1:8000/server');
//3、发送Ajax请求(设置请求参数)
xhr.send('a=1&b=2');
//4、事件绑定,处理服务端返回结果
xhr.onreadystatechange = function () {//处理前判断服务端是否返回所有结果和服务端的状态码是2**if(xhr.readyState === 4){if(xhr.status >= 200 && xhr.status < 300){//处理结果(响应行、响应头、空行、响应体)// //1、响应行// console.log(xhr.status);//状态码// console.log(xhr.statusText);//状态字符串,若成功响应式为OK// console.log(xhr.getAllResponseHeaders());//所有响应头// console.log(xhr.response);//所有响应体//将响应内容显示到dom视图result.innerHTML = xhr.response;}}
}  



3、设置请求头(在xhr的send方法之前进行设置)

  • 通过xhr.setRequestHeader方法
  //设置请求头//属性:Content-Type:设置请求体的类型xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');//也可以自定义请求头,但是需要服务端设置允许,// 例如服务端的代码中添加响应头的设置:response.setHeader('Access-Control-Allow-Headers', '*');//自定义请求头xhr.setRequestHeader('custom', '111');

✿ 总结一下:在Ajax请求中设置请求行、请求体、请求头

(1)请求行的请求方式、请求路径设置在xhr对象的open方法的第一个参数、第二个参数上
(2)请求体(请求参数-要传输的数据): 请求方式是get时,请求参数拼接在请求路径url上,请求方式是post时,请求参数设置为send方法的参数。
(3)请求头在send方法之前进行设置,通过xhr.setRequsetHeader(‘请求头名’, ‘请求头值’)方法进行设置



4、服务端响应Json数据

■ 服务端代码server.js 文件:

  • 通过JSON.stringify(json对象); 将json对象转化成字符串,然后再响应给客户端
//3、创建路由规则
//请求方式设置为all,可以接收http任意类型的请求
app.all('/server', (request, response) => {//设置响应头(允许跨域)response.setHeader('Access-Control-Allow-Origin', '*');//设置响应头(允许自动自定义请求头)response.setHeader('Access-Control-Allow-Headers', '*');//响应一个json数据(因为send方法的参数类型是字符串,所以需要先对json数据进行转化)const data = {name: '小明',age: 18,sex: '男'};//data 数据类型转化(通过JSON.stringify()方法进行转化),// 接收的时候通过设置响应体数据格式为json即可,也可以通过JSON.parse(xhr.response) 将数据类型转为json对象let str = JSON.stringify(data);//设置响应体response.send(str);
});

■ 发送ajax请求.html 文件:

  • 客户端的html代码中设置xhr响应数据格式为Json; xhr.responseType = ‘json’;
<script>//获取按钮const btn = document.getElementsByTagName('button')[0];const result = document.getElementById('result');btn.onclick = function () {// console.log('test');//接下来发送ajax请求(4个步骤)//1、创建XmlHttpRequset对象const xhr = new XMLHttpRequest();//设置响应的数据格式为jsonxhr.responseType = 'json';//2、通过xhr对象的open方法进行初始化,设置请求方法和请求url,请求参数(第一个参数使用?,其余使用&)xhr.open('get', 'http://127.0.0.1:8000/server');//设置请求头//属性:Content-Type:设置请求体的类型xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');//也可以自定义请求头,但是需要服务端设置允许,// 例如服务端的代码中添加响应头的设置:response.setHeader('Access-Control-Allow-Headers', '*');//自定义请求头xhr.setRequestHeader('custom', '111');//3、发送Ajax请求xhr.send();//4、事件绑定,处理服务端返回结果xhr.onreadystatechange = function () {//处理前判断服务端是否返回所有结果和服务端的状态码是2**if (xhr.readyState === 4) {if (xhr.status >= 200 && xhr.status < 300) {//处理结果(响应行、响应头、空行、响应体)// //1、响应行// console.log(xhr.status);//状态码// console.log(xhr.statusText);//状态字符串,若成功响应式为OK// console.log(xhr.getAllResponseHeaders());//所有响应头// console.log(xhr.response);//所有响应体//将响应内容显示到dom视图// result.innerHTML = xhr.response;console.log(xhr.response);}}}}</script>



在这里插入图片描述


http://chatgpt.dhexx.cn/article/3IUAIhuX.shtml

相关文章

尚硅谷AJAX教程

优点&#xff1a;无需刷新页面获取数据&#xff0c;允许你根据用户事件来更新部分页面内容 缺点&#xff1a;没有浏览历史&#xff0c;不能回退&#xff0c;存在跨域&#xff0c;SEO不友好 原生XHR请求 get请求 <body><button>获取数据</button><scri…

AJAX (2) — AJAX请求的基本操作、设置请求参数、发送POST请求,POST设置请求体、AJAX设置请求头信息

目录 一、AJAX请求的基本操作 1.server.js文件 2.GET.html文件 二、AJAX设置请求参数 三、AJAX发送POST请求 1.POST.html文件 2.server.js文件 四、POST设置请求体 五、AJAX设置请求头信息 1.预定义头信息 2.自定义头信息 一、AJAX请求的基本操作 先设计出一个需求&…

css ::after和::before详解

伪元素:before和:after添加的内容默认是inline元素 <style>p:before{content: "hello "}p:after{content: "you are handsome!"}</style><p>xx!</p>等价于下面的html结构:<p><span>hello </span>xxx!<span&g…

深入了解::before 和 ::after 伪元素

点击上方 前端瓶子君&#xff0c;关注公众号 回复算法&#xff0c;加入前端编程面试算法每日一题群 本文从最简单的开始&#xff0c;解释如何理解和使用::before和::after。然后再在实际使用场景中去应用它。 ::before和::after是什么? ::before和::after可以添加到选择器以创…

:after和:before的作用及使用方法

1. :before 和 :after 的主要作用是在元素内容前后加上指定内容&#xff0c;示例&#xff1a; HTML代码&#xff1a; <p>你好</p> CSS代码&#xff1a; p:before{content: Hello;color: red; } p:after{content: Tom;color: red; } 效果如图&#xff1a; 以上代码…

::before和::after伪元素的用法案例

CSS3中伪类采用单冒号写法&#xff0c;伪元素采用双冒号写法。 伪类举例——:hover,:link,:active,:target。 伪元素举例——::before,::after,::first-letter,::first-line,::selection。 一、介绍 今天写网页时遇到一个问题&#xff0c;视口的背景中插入一个小图标的话&a…

beforeSend 出现跨域问题,header里直接设置token就没问题----Day1

一开始前端调用后端接口出现跨域问题&#xff0c;右键查看元素&#xff0c;会有跨域错误提示&#xff0c;类似下图&#xff0c;后来找后端设置了一下&#xff0c;问题解决。可以登录获取token等参数了。 但是 请求设备列表时&#xff0c;beforeSend 中设置token却失败了&#x…

after和before的作用及使用方法

:after和:before的作用及使用方法 1、 :before 和 :after 的主要作用是在元素内容前后加上指定内容&#xff0c;示例&#xff1a; HTML代码&#xff1a; <p>你好</p>CSS代码&#xff1a; p:before{content: Hello;color: red; } p:after{content: Tom;color: r…

@Before, @BeforeClass, @BeforeEach 和 @BeforeAll之间的不同

1. 不同注解的区别如下&#xff1a; 特性 Junit 4Junit 5 在当前类的所有测试方法之前执行。注解在静态方法上。此方法可以包含一些初始化代码。BeforeClassBeforeAll 在当前类中的所有测试方法之后执行。注解在静态方法上。此方法可以包含一些清理代码。AfterClassAfterAll 在…

HTML中 :before 和 :after 的用法

1. :before 和 :after 的主要作用是在元素内容前后加上指定内容&#xff0c;示例&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEed…

:before和:after的使用方法

伪元素可以让我们很方便的加入一个样式&#xff0c;比如在字体前加一个icon&#xff0c;或者加一个下换线&#xff0c;可以不占一个元素的位置&#xff0c;使用起来也很方便&#xff0c;现在介绍一下使用的方法。 注意&#xff1a;:before和:after中的content是必加项 <!DO…

@Before和@After的区别

通常我们使用JUnit的时候&#xff0c;会有一些方法需要提前或最后执行&#xff0c;则需要如下几种方式进行注解

css中::before ::after的用法

一、介绍 ::before和::after是伪元素&#xff0c;&#xff08;css3中为了与伪类做区别&#xff0c;伪元素采用双冒号的写法&#xff1b;但因为兼容性的问题&#xff0c;所以现在大部分还是统一的单冒号&#xff0c;比如:first-line、:first-letter、:before、:after等&#xf…

:before、:after伪元素的用法 !

:after 伪元素在元素之后添加内容。:before伪元素在元素之前添加内容。 这个伪元素允许创作人员在元素内容的最后面插入生成内容。默认地&#xff0c;这个伪元素是行内元素&#xff0c;不过可以使用属性 dispiay 改变这一点。 &#xff1a;before和&#xff1a;&#xff1a;be…

CSS中的:before和 :after

1. &#xff1a;before和 &#xff1a;after CSS中的:befor、:after都会创建一个伪元素&#xff0c;其中:befor创建的伪元素是所选元素的第一个子元素&#xff0c;:after创建的伪元素是所选元素的最后一个子元素。 :befor、:after创建的伪元素**默认样式为内联样式**。 &…

::before和::after伪元素的用法

一、介绍 css3为了区分伪类和伪元素&#xff0c;伪元素采用双冒号写法。 常见伪类——:hover,:link,:active,:target,:not(),:focus。 常见伪元素——::first-letter,::first-line,::before,::after,::selection。 ::before和::after下特有的content&#xff0c;用于在css渲…

after::和before::的用法

:after和:before的作用及使用方法 1. :before 和 :after 的主要作用是在元素内容前后加上指定内容&#xff0c;示例&#xff1a; HTML代码&#xff1a; <p>你好</p> CSS代码&#xff1a; p:before{content: Hello;color: red; } p:after{content: Tom;color: red;…

before 和after的用法

转载自&#xff1a;lur88 一、介绍 css3为了区分伪类和伪元素&#xff0c;伪元素采用双冒号写法。(:before和:after是在CSS2中提出来的&#xff0c;CSS3中的写法是::before和::after) 常见伪类——:hover,:link,:active,:target,:not(),:focus。 常见伪元素——::first-letter,…

before和after的用法

一、介绍 css3为了区分伪类和伪元素&#xff0c;伪元素采用双冒号写法。(:before和:after是在CSS2中提出来的&#xff0c;CSS3中的写法是::before和::after) 常见伪类——:hover,:link,:active,:target,:not(),:focus。 常见伪元素——::first-letter,::first-line,::before…

css中的before与after

before与after是css中的两个伪元素。所谓的伪元素就是一个虚假的元素&#xff0c;并插入到目标元素内容的之前与之后&#xff0c;我们一般可以通过css来控制它。其实before与after的编码是非常的简单的&#xff0c;就像我们在css中对他进行操作&#xff0c;比如设置他的背景颜色…