AJAX—基础

Ajax基础

概述

在这里插入图片描述

已知发送请求的方式:

地址栏输入地址,回车刷新、特定元素的href属性、表单提交,一般来说都是通过浏览器操作的,这些方案无法通过代码方式实现对服务器端发送请求

需求:

对服务器发出请求并且能够接收服务端返回的响应,通过js直接发送网络请求,web的可能就会更多,实现的功能也就越多

Google Suggest:

1、是在浏览器端进行网络编程(发送请求、接收响应)的技术方案

2、可以直接获取服务端的内容而不用重新加载页面

Ajax:

1、浏览器提供的一套API,可以通过JS调用,实现通过代码控制请求和响应,实现js网络编程

2、XML:在客户端和服务端之间传递数据时采用的数据格式

3、能够按需获取数据、对用户数据进行校验、自动更新页面的内容、提高用户无刷新的体验

原生Ajax发送请求步骤

1、创建XMLHttpRequest类型对象——相当于打开了一个浏览器

var xhr = new XMLHttpRequest();

2、准备发送,打开与一个网址之间的连接——相当于在地址栏输入网址

xhr.open("GET", "https://jsonplaceholder.typicode.com/users");

3、执行发送动作——相当于点击回车或者超链接

xhr.send(null);

4、指定xhr状态变化的事件处理函数——相当于处理网页呈现后的操作

xhr.onreadystatechange = function()
 {
    if (this.readyState === 4)
    {  console.log(this.responseText); }
 }
  • 先判断xhr的readystate确定此次状态是否完成
  • 得到的内容存在于一个响应体中responseText
xhr对象

AJAX API中提供的是一个XMLHttpRequest类型,所有的AJAX操作都需要用到这个类型

if (window.XMLHttpRequest) { xhr = new XMLHttpRequest();} 
//IE6兼容性
else { xhr = new ActiveXObject("Microsoft.XMLHTTP");}
open方法

本质上XMLHttpRequest是js在web平台发送的HTTP请求的手段,所以我们发出的HTTP请求同样要符合HTTP约定的格式

xhr.open(method,url)

  • method:要使用的HTTP方法,比如GET、POST、PUT、DELETE等
  • url:要向其发送请求的URL地址
send方法

用于发送HTTP请求

xhr.send(body)

  • body:在XHR请求中要发送的数据体,根据请求头中的类型进行传参,如果是GET,无需设置数据体,可以传null或者不传参

    xhr.open
    ("GET", "https://jsonplaceholder.typicode.com/users?id=1");
    
  • 如果是别的方法open()方法和send()方法之间需要请求头

    xhr.open
    ("POST", "https://jsonplaceholder.typicode.com/users");
    //xhr.setRequestHeader(header,value);
    //header是传输数据类型,即服务器需要我们传送的数据类型,value是具体的数据类型,常用“application/x-www-form-urlencoded”和“application/json”
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");//会在后面追加一条新的信息内容
    xhr.send("name=harry&age=19");//内容写法有多种
    
响应状态

readyState属性返回一个XMLHttpRequest代理当前所处的状态,readystatechange事件是在xhr对象状态变化的时候触发,意味着这个事件会被触发多次,在不同状态下readyState值也不同

状态值表示
在这里插入图片描述

不同阶段状态
在这里插入图片描述

同步和异步

xhr.open()第三个参数为Boolean值,用来设置此次请求是否采用异步方式执行

同步:一个人在一个时刻只能做一件事,在执行一些耗时操作是不去做别的事,只是等待(false),设置同步加载会卡在send()部分,需要将onready事件向前提

异步:在执行耗时的事情的时候,不是等待而是去做别的事(true)

数据格式

如果希望服务器端返回一个复杂数据,该如何处理?服务器端发出何种格式的数据,这种格式如何在客户端用JS解析

xml

传统的数据描述手段

  • 元数据:用于描述数据的数据,占用的数据量比较大
  • 数据冗余较多,不利于大量数据的网络传输
json

JS对象表示法,类似于JS字面量的表示,其中的区别:

  • JSON数据不需要存在变量中,结束不需要写分号,属性名必须加引号

JSON字符串格式和对象格式的相互转化

var str = `{"name":"hob","age":18}`;
//parse方法是将JSON字符串转化为对象格式
console.log(JSON.parse(str)); //{name: "hob", age: 18}
//stringify方法是将对象格式转化为JSON字符串格式
console.log(JSON.stringify(obj)); //{"name":"Tom","age":"20","cp":{"name":"Cherry"}}
json-server

是一个Node模块,运行Express服务器,可以指定一个json文件作为api的数据源 ,快速搭建web服务器

https://github.com/typicode/json-server
  • json-server的安装

在这里插入图片描述

  • 定制一个我们自己的json文件

  • 部署到服务器之上,根据分配的地址进行访问
    在这里插入图片描述

*当我们通过vs输入命令运行的时候,实际上打开了一个终端执行,这样没打开一个就是占用一个端口号,需要我们关闭运行内容后,才能重新测试新的文件 *

使用方法

分配资源路由名称,可以通过路由进行查找,增删改

在这里插入图片描述

原生Ajax应用
GET方法

请求过程中,参数传递都是通过URL地址中的‘?’参数传递,无需设置请求头,也无需设置响应体,可以传null或者不传

xhr.open
("GET", "https://jsonplaceholder.typicode.com/users?id=1");
POST方法

在请求过程中,都是采用请求体承载需要提交的数据,设置请求头中的Content-Type以便于服务器端接收数据,需要提交到服务器的数据通过send参数传递

xhr.open("POST", "http://localhost:3000/users");
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("name=lily&age=22&class=4");
  • 一方面会在控制台进行内容的输出,另一方面还会将我们添加的内容追加到我们的json文件中去
  • 如果使用value=x-www-form-urlencoded就需要用&将参数连接
  • 使用value=json的在send发送请求传参是json格式的
响应数据渲染

如果数据结构简单,可以直接通过字符串拼接的方法处理

 xhr.onreadystatechange = function() {
 if (this.readyState === 4) {
 //将json数据转化为对象
 var data = JSON.parse(this.responseText);
 var str = ""//使用字符串追加的方法进行数据的添加
 for (var i = 0; i < data.length; i++) {
 tr += "<tr><td>" + data[i].id + "</td><td>" + data[i].name + "</td><td>" + data[i].age + "</td><td>" + data[i].class + "</td></tr>"  }
 box.innerHTML += str;}}

如果数据较大的时候,我们就需要采用ES6提供的模板字符串

 str += `<tr>
    <td>${data[i].id}</td>
    <td>${data[i].name}</td>
    <td>${data[i].age}</td>
    <td>${data[i].clss}</td>
</tr>`
封装Ajax函数

了解封装的过程, 一般在开发中使用第三方提供的AJAX库,在后续开发过程中可以更方便使用这套API,将其封装到一个函数中

参数1:{string} method 请求方法

** 参数2:{string} url 请求地址*

** 参数3:{Object} params 请求参数*

** 参数4:{function} done 请求完成后执行的回调函数*

下篇内容更精彩!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值