目录

前后端数据交互——ajax

1. 介绍

2.原生ajax用法

3.jquery的ajax

4.ajax原理说明


 

前后端数据交互——ajax

1. 介绍

1.1 定义

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

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

1.2 传统请求的问题

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

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

  • 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("请求失败")
              }
          }
      }

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐