JavaScript前后端数据交互工具ajax使用教程

目录

1. 介绍

1.1定义

Ajax(Asynchronous Javascript And XML) 是一种在无需重新加载整个网页的情况下,能够更新部分 网页的技术。

通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。 这意味着可以在不重新加载整个网

1.2传统请求的问题

浏览器地址栏发送请求,是同步的(阻塞代码运行),当服务器很忙碌的时候会卡顿(等待),就造成 了资源浪费

1.3Ajax请求与传统请求的区别

ajax数据交互的优点是 在请求数据的时候 不会阻塞后续js代码的执行

带有ajax代码的js代码的执行顺序

1.从上到下执行

2.遇到ajax代码后 先发送请求

3.在等待服务器响应数据的时间段内 继续向下执行其他js代码

4.等到服务器数据响应回来 再执行渲染数据的代码

1.4应用场景

但凡遇到动态渲染的效果 我们都应该使用ajax

2.原生ajax用法

2.1ajax的基础语法

本质上ajax其实是es5中提供的一个构造函数——XMLHttpRequest

ajax实现前后端数据交互的步骤如下

//1.创建 ajax交互对象 通过XMLHTTPRequest来实例化出来
let ajax = new XMLHttpRequest();
//2.建立前端和服务器之间的连接 ajax对象有一个方法 open 调用即可建立连接
ajax.open("请求方式","服务器url地址");
//3.发送请求 ajax对象有一个方法 send 调用即可发送请求
ajax.send();
//4.接收服务器响应数据  ajax中是通过ajax对象的一个事件——onreadystatechange(通信状态码/生命周期 改变事件)
ajax.onreadystatechange = ()=>{
    //5.接收响应数据 当通信状态码为4的时候 就可以获取到响应数据了
    if(ajax.readyState==4){
        if(ajax.status==200||ajax.status==304){
            console.log(ajax.responseText)
        }
        else{
            console.log("请求失败")
        }
    }
}

ajax 的 通信状态码/生命周期

ajax的通信状态码/生命周期有五个 代表的含义 各不相同

分别是

0:请求未初始化(ajax对象还没有声明出来)

1:已建立连接(ajax对象调用了open)

2:已发送请求(ajax对象调用了send)

3:服务器接收到请求并正在处理

4:服务器已响应数据

随着ajax数据交互的一步步推荐 通信状态码/生命周期 会自动发生变化

每当通信状态码/生命周期 发生变化 就会触发一次onreadystatechange事件

在ajax中 我们可以通过ajax对象的一个属性 readyState 来获取通信状态码/生命周期

ajax对象.readyState

我们也可以通过ajax对象的一个属性 responseText 来获取响应数据

ajax对象.responseText

我们还可以通过ajax对象的一个属性 status 来获取响应状态码

ajax对象.status

2.2ajax提交数据

在不同的请求方式下 请求提交数据的写法 也不同 我们主要了解一下 get 和 post两种请求方式的提交数据的写法

get

get请求提交数据 是在地址后面 添加 "?键名=键值&键名=键值&..."

//1.创建 ajax交互对象 通过XMLHTTPRequest来实例化出来
let ajax = new XMLHttpRequest();
//2.建立前端和服务器之间的连接 ajax对象有一个方法 open 调用即可建立连接  
//get请求提交数据 提交在地址后面
ajax.open("get","服务器url地址?键名=键值&键名=键值&...");
//3.发送请求 ajax对象有一个方法 send 调用即可发送请求
ajax.send();
//4.接收服务器响应数据  ajax中是通过ajax对象的一个事件——onreadystatechange(通信状态码/生命周期 改变事件)
ajax.onreadystatechange = ()=>{
    //5.接收响应数据 当通信状态码为4的时候 就可以获取到响应数据了
    if(ajax.readyState==4){
        if(ajax.status==200||ajax.status==304){
            console.log(ajax.responseText)
        }
        else{
            console.log("请求失败")
        }
    }
}

post

post请求提交数据 是写在 send方法中 将要提交的数据作为send方法的实参 传入

post请求在提交之前 需要单独设置请求头 使用ajax对象的setRequestHeader方法 就可以设置请求头了

//1.创建 ajax交互对象 通过XMLHTTPRequest来实例化出来
let ajax = new XMLHttpRequest();
//2.建立前端和服务器之间的连接 ajax对象有一个方法 open 调用即可建立连接  
//get请求提交数据 提交在地址后面
ajax.open("post","服务器url地址?键名=键值&键名=键值&...");
//设置请求头
ajax.setRequestHeader("content-type","application/x-www-form-urlencoded"/"application/json")
//3.发送请求 ajax对象有一个方法 send 调用即可发送请求
//将要提交的数据 作为实参 传入send方法中
ajax.send("键名=键值&键名=键值&..."/JSON.stringify({}));
//注意:如果设置为 application/json 提交的数据 必须是一个对象格式的json字符串
//4.接收服务器响应数据  ajax中是通过ajax对象的一个事件——onreadystatechange(通信状态码/生命周期 改变事件)
ajax.onreadystatechange = ()=>{
    //5.接收响应数据 当通信状态码为4的时候 就可以获取到响应数据了
    if(ajax.readyState==4){
        if(ajax.status==200||ajax.status==304){
            console.log(ajax.responseText)
        }
        else{
            console.log("请求失败")
        }
    }
}

在不提交数据的时候的 post请求 即使不设置请求头 也不会出问题 但是我们一般为了语义和提高容错率,都会选择设置请求头。

3.jquery的ajax

3.1基本用法

jquery的ajax 是 $的一个方法——ajax 调用这个方法 并传参 即可实现ajax数据交互

$(()=>{
    //调用ajax方法 实现数据交互
    $.ajax({
        url:"服务器url地址",//必传项
        type:"请求方式",//可选项 默认值为get
        dataType:"数据交互的格式"//可选项 默认值为json 另外还可以选择 xml text jsonp
        data:{},//请求提交的数据 可选项 默认不提交数据  如果想提交 在对象中 写入属性即可提交
        timeout:数字,//超时时间 可选项 默认为无限 如果设置了具体的超时时间 则会在请求发送后 超过超时                     时间还没接收到响应数据的时候  停止请求 并报错404   单位为ms
        beforeSend(){
            //这个方法函数 会在ajax发送请求前 执行
        },
        success(res){
            //这个方法函数 会在ajax发送请求 并成功接收到响应数据的时候 执行 形参会接收到响应数据
        },
        error(err){
            //这个方法函数 会在ajax接收响应数据失败的时候执行 形参会接收到 失败信息
        },
        complete(){
            //这个方法函数 会在ajax交互完成的时候 执行
        }
    })
})

注意:在实参对象中 四个方法 理论上都可以不传 但是success在实际开发中必传 因为success是用来接收响应数据的

3.2jquery的ajax交互简化方法

get

用法:$.get("url地址?键值对&键值对...",(res)=>{ res形参用来接收响应数据 })

post

用法:$.post(url地址,{要提交的数据},(res)=>{ res形参用来接收响应数据 })

4.ajax原理说明

ajax的数据交互方式 对比 传统的输入地址的交互方法 最大的优点是

是不阻塞后续代码

在等待响应数据的时间段内 会继续向下执行后续js代码

这个优点的原理 来源于 js的同步异步代码的区分和执行顺序

js同步异步代码的执行顺序

js代码从上到下执行

如果遇到同步代码 就直接执行

如果遇到异步代码 会先存入 任务队列 之后继续向下执行

直到所有同步代码 都执行完了 再去任务队列中 将异步代码 按照顺序 依次取出并执行

js中同步代码和异步代码的分类

异步代码:事件、定时器、ajax

同步代码:除了异步之外 都是同步

ajax代码 为什么能不阻塞后续js代码的执行

//1.创建 ajax交互对象 通过XMLHTTPRequest来实例化出来
let ajax = new XMLHttpRequest();//同步代码
//2.建立前端和服务器之间的连接 ajax对象有一个方法 open 调用即可建立连接
ajax.open("请求方式","服务器url地址");//同步代码
//3.发送请求 ajax对象有一个方法 send 调用即可发送请求
ajax.send();//同步代码
//4.接收服务器响应数据  ajax中是通过ajax对象的一个事件——onreadystatechange(通信状态码/生命周期 改变事件)
ajax.onreadystatechange = ()=>{//ajax的异步 体现在事件上 事件是异步代码
    //5.接收响应数据 当通信状态码为4的时候 就可以获取到响应数据了
    if(ajax.readyState==4){
        if(ajax.status==200||ajax.status==304){
            console.log(ajax.responseText)
        }
        else{
            console.log("请求失败")
        }
    }
}
原文地址:https://blog.csdn.net/weixin_64037609/article/details/127470967
175人参与, 0条评论 登录后显示评论回复

你需要登录后才能评论 登录/ 注册