xhr 的 readyState 属性表示当前Ajax请求所处的状态:
open()函数的第三个参数表示是否开启异步请求,false:同步;true:异步
xhr 发起 GET 请求
- // 1.创建xhr对象
- let xhr = new XMLHttpRequest();
-
- //设置超时时间
- xhr.timeout=3000
- //设置超时后的处理函数
- xhr.ontimeout=function(){}
-
- // 2.调用xhr.open()函数----不带参数
- xhr.open(
- "GET",
- "http://www.liulongbin.top:3006/api/getbooks",
- true
- );
-
- // 2.调用xhr.open()函数---带参数(查询字符串)
- // xhr.open("GET", "http://www.liulongbin.top:3006/api/getbooks?id=1", true);
-
- // 3.调用xhr.send()函数
- xhr.send();
- // 4.监听xhr.onreadystatechange事件
- xhr.onreadystatechange = function () {
- console.log("xhr.status", xhr.status);//打印三次
- if (xhr.readyState === 4 && xhr.status == 200) {
- console.log(xhr.responseText);
- console.log(xhr.response);
- // 返回的参数为json格式,需要转换为对象格式
- const result = JSON.parse(request.responseText)
- }
- };
xhr 发起 POST 请求
- // 1.创建xhr对象
- let xhr = new XMLHttpRequest();
- // 2.调用xhr.open()函数
- xhr.open("POST", "http://www.liulongbin.top:3006/api/addbooks", true);
- // 3.设置 Content-Type 请求头----位置顺序不能变
- xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- // 4.调用xhr.send()函数
- xhr.send('bookname=水浒传&author=施耐庵&publisher=上海图书出版社');
- // 5.监听xhr.onreadystatechange事件
- xhr.onreadystatechange = function () {
- console.log("xhr.status", xhr.status);
- if (xhr.readyState === 4 && xhr.status == 200) {
- console.log(xhr.responseText);
- console.log(xhr.response);
- // 返回的参数为json格式,需要转换为对象格式
- const result = JSON.parse(request.responseText)
- }
- };
使用 FormData 管理表单数据
- // 新建 FormData 对象
- let fd = new FormData();
- // 为 FormData 添加表单项
- fd.append("uname", "zs");
- fd.append("upwd", "123456");
- // 创建xhr对象
- let xhr = new XMLHttpRequest();
- xhr.open("POST", "http://www.liulongbin.top:3006/api/formdata");
- //提交 FormData 对象,与提交网页表单的效果相同
- xhr.send(fd);
-
- xhr.onreadystatechange = function () {
- console.log("xhr.status", xhr.status);
- if (xhr.readyState === 4 && xhr.status == 200) {
- console.log(xhr.responseText);
- console.log(xhr.response);
- // 返回的参数为json格式,需要转换为对象格式
- const result = JSON.parse(request.responseText)
- }
- };
使用 FormData快速获取表单数据
- // 获取表单元素
- let myForm = document.querySelector("#form");
- // 监听表单的submit事件
- myForm.addEventListener("submit", function(e) {
- e.preventDefault();
- // 根据 form 表单 创建 FormData 对象,会自动将表单填充到 FormData 对象中
- let fd = new FormData(myForm);
- // 创建xhr对象
- let xhr = new XMLHttpRequest();
- xhr.open("POST", "http://www.liulongbin.top:3006/api/formdata");
- //提交 FormData 对象,与提交网页表单的效果相同
- xhr.send(fd);
- xhr.onreadystatechange = function() {};
- });
文件上传
数据交换格式:服务器端与客户端间进行数据传输与交换的格式,前端包括:JSON 和 XML
HTML 和XML区别:HTML 被设计用来描述网页的内容,是网页内容的载体;XML 被设计用来传输和存储数据,是数据的载体。XML 体积庞大,格式臃肿,传输效率低,在js中解析XML比较麻烦。
JSON 结构的 key 必须使用英文的双引号包裹,value类型包含:数字、字符串、布尔值、null、数组、对象,不能使用undefined和函数作为值,且不能写注释
序列化:把对象转换为字符串的过程,例如:调用 JSON.stringify()
反序列化:把字符串转换为对象的过程,例如:调用 JSON.parse()