首页 > 其他分享 >前后端异步交互-Ajax

前后端异步交互-Ajax

时间:2023-03-22 20:14:21浏览次数:26  
标签:异步 axios 请求 data 发送 Ajax 交互

Ajax

1、Ajax介绍

1,Ajax概述

Ajax: 全称Asynchronous JavaScript And XML,异步的JavaScript和XML。其作用有如下2点:

  • 与服务器进行数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。
  • 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,例如我们在浏览器中的输入关键字的时候,在下方就会智能的推荐。

2,Ajax作用

详细的解释一下Ajax技术的2个作用

  • 与服务器进行数据交互

    如下图所示前端资源被浏览器解析,但是前端页面上缺少数据,前端可以通过Ajax技术,向后台服务器发起请求,后台服务器接受到前端的请求,从数据库中获取前端需要的资源,然后响应给前端,前端在通过我们学习的vue技术,可以将数据展示到页面上,这样用户就能看到完整的页面了。此处可以对比JavaSE中的网络编程技术来理解。

在这里插入图片描述

  • 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术。

    如下图所示,当我们再百度搜索java时,下面的联想数据是通过Ajax请求从后台服务器得到的,在整个过程中,我们的Ajax请求不会导致整个百度页面的重新加载,并且只针对搜索栏这局部模块的数据进行了数据的更新,不会对整个页面的其他地方进行数据的更新,这样就大大提升了页面的加载速度,用户体验高。
    在这里插入图片描述

3,同步请求和异步请求

针对于上述Ajax的局部刷新功能是因为Ajax请求是异步的,与之对应的有同步请求。接下来我们介绍一下异步请求和同步请求的区别。

  • 同步请求发送过程如下图所示:

在这里插入图片描述

浏览器页面在发送请求给服务器,在服务器处理请求的过程中,浏览器页面不能做其他的操作。只能等到服务器响应结束后才能,浏览器页面才能继续做其他的操作。

  • 异步请求发送过程如下图所示:
    在这里插入图片描述

浏览器页面发送请求给服务器,在服务器处理请求的过程中,浏览器页面还可以做其他的操作。

2、原生Ajax

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>原生Ajax</title>
</head>
<body>
    
    <input type="button" value="获取数据" onclick="getData()">

    <div id="div1"></div>
    
</body>
<script>
    function getData(){
     //1. 创建XMLHttpRequest 
		var xmlHttpRequest  = new XMLHttpRequest();
        //2. 发送异步请求
        xmlHttpRequest.open('GET','http://yapi.smart-xwork.cn/mock/169327/emp/list');
        xmlHttpRequest.send();//发送请求
        //3. 获取服务响应数据
xmlHttpRequest.onreadystatechange = function(){
    //此处判断 4表示浏览器已经完全接受到Ajax请求得到的响应, 200表示这是一个正确的Http请求,没有错误
    if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){
        document.getElementById('div1').innerHTML = xmlHttpRequest.responseText;
    }
}
    }
</script>
</html>

最后我们通过浏览器打开页面,请求点击按钮,发送Ajax请求,最终显示结果如下图所示:

并且通过浏览器的f12抓包,我们点击网络中的XHR请求,发现可以抓包到我们发送的Ajax请求。XHR代表的就是异步请求

3、Axios入门

上述原生的Ajax请求的代码编写起来还是比较繁琐的,所以接下来我们学习一门更加简单的发送Ajax请求的技术Axios 。Axios是对原生的AJAX进行封装,简化书写。Axios官网是:https://www.axios-http.cn

基本使用

Axios的使用比较简单,主要分为2步:

  • 引入Axios文件
<script src="js/axios-0.18.0.js"></script>
  • 使用Axios发送请求,并获取响应结果,官方提供的api很多,此处给出2种,如下

    • 发送 get 请求

      axios({
          method:"get",
          url:"http://localhost:8080/ajax-demo1/aJAXDemo1?username=zhangsan"
      }).then(function (resp){
          alert(resp.data);
      })
      
    • 发送 post 请求

      axios({
          method:"post",
          url:"http://localhost:8080/ajax-demo1/aJAXDemo1",
          data:"username=zhangsan"
      }).then(function (resp){
          alert(resp.data);
      });
      

    axios()是用来发送异步请求的,小括号中使用 js的JSON对象传递请求相关的参数:

    • method属性:用来设置请求方式的。取值为 get 或者 post。
    • url属性:用来书写请求的资源路径。如果是 get 请求,需要将请求参数拼接到路径的后面,格式为: url?参数名=参数值&参数名2=参数值2。
    • data属性:作为请求体被发送的数据。也就是说如果是 post 请求的话,数据需要作为 data 属性的值。

    then() 需要传递一个匿名函数。我们将 then()中传递的匿名函数称为 回调函数,意思是该匿名函数在发送请求时不会被调用,而是在成功响应后调用的函数。而该回调函数中的 resp 参数是对响应的数据进行封装的对象,通过 resp.data 可以获取到响应的数据。

快速入门

然后在html中引入axios所依赖的js文件,并且提供2个按钮,绑定单击事件,分别用于点击时发送ajax请求,完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ajax-Axios</title>
    <script src="js/axios-0.18.0.js"></script>
</head>
<body>
    
    <input type="button" value="获取数据GET" onclick="get()">

    <input type="button" value="删除数据POST" onclick="post()">

</body>
<script>
    function get(){
        //通过axios发送异步请求-get
        axios({
            method: "get",
            url: "http://yapi.smart-xwork.cn/mock/169327/emp/list"
        }).then(result => {
            console.log(result.data);
        })


    }

    function post(){
       // 通过axios发送异步请求-post
        axios({
            method: "post",
            url: "http://yapi.smart-xwork.cn/mock/169327/emp/deleteById",
            data: "id=1"
        }).then(result => {
            console.log(result.data);
        })

    }
</script>
</html>

请求方法别名

Axios还针对不同的请求,提供了别名方式的api,具体如下:

方法 描述
axios.get(url [, config]) 发送get请求
axios.delete(url [, config]) 发送delete请求
axios.post(url [, data[, config]]) 发送post请求
axios.put(url [, data[, config]]) 发送put请求

我们目前只关注get和post请求,所以在上述的案例中,我们可以将get请求代码改写成如下:

axios.get("http://yapi.smart-xwork.cn/mock/169327/emp/list").then(result => {
    console.log(result.data);
})

post请求改写成如下:

axios.post("http://yapi.smart-xwork.cn/mock/169327/emp/deleteById","id=1").then(result => {
    console.log(result.data);
})

我们往往配合Vue中的“钩子函数”,对后台的进行 异步请求:

大致如下:

<script>
    new Vue({
       el: "#app",
       data: {
         emps:[]
       },
       mounted () {
          //发送异步请求,加载数据
          axios.get("http://yapi.smart-xwork.cn/mock/169327/emp/list").then(result => {
            console.log(result.data);
            this.emps = result.data.data;
          })
       }
    });
</script>

标签:异步,axios,请求,data,发送,Ajax,交互
From: https://www.cnblogs.com/yfs1024/p/17245271.html

相关文章

  • Ajax 的基本用法-1与Ajax的基本用法-2
    Ajax的基本用法-1XMLHttpRequestAjax想要实现浏览器服务器之间的异步通信,需要依靠XMLHttpRequest,它是一个构造函数不论是XMLHttp......
  • localStorage 的注意事项与初识 Ajax
    localStorage的注意事项localStorage的存储期限localStorage是持久化的本地存储,除非手动请求(比如通过js删除,或者清除浏览器缓存),否则数据是永远不会......
  • 一种异步延迟队列的实现方式
    作者:京东零售张路瑶1.应用场景目前系统中有很多需要用到延时处理的功能:支付超时取消、排队超时、短信、微信等提醒延迟发送、token刷新、会员卡过期等等。通过延时处理,......
  • Python 异步: 非阻塞流(20)
    动动发财的小手,点个赞吧!asyncio的一个主要好处是能够使用非阻塞流。1.异步流Asyncio提供非阻塞I/O套接字编程。这是通过流提供的。可以打开提供对流写入器和流写......
  • Ajax及其应用
    1.什么是ajexajax的全称是AsynchronousJavaScriptandXML,其中Asynchronous是异步的意思,它有别于传统web开发中采用的同步的方式。2.ajex包含的技术   大家都知......
  • 哪5种IO模型?什么是selectpollepoll?同步异步阻塞非阻塞有啥区别?
    1.有哪五种I/O模型-BlockingI/O【阻塞I/O】-NonBlockingI/O【非阻塞I/O】-MultiplexingI/O【I/O多路复用】-AsynchronousIO【异步I/O】-SignalDrivenIO【......
  • js异步经典之Promise
    异步要了解Promise首先需要了解异步,这是js一个老生常谈的问题,为什么js会有异步,这和js最开始的的作用是离不开的。js是单线程的语言,他主要是实现用户与浏览器的交互,以及操......
  • WPF加载网页与交互
     参考资料:https://www.jianshu.com/p/039dc834b2b9;https://zhuanlan.zhihu.com/p/102688922方法1:使用【WebBrowser】,能加载大部分网页  xmlns:wf="clr-namespace......
  • FormData以及封装Ajax
    FormData1.什么是FormDataFormData是Ajax2.0(XMLHttpRequestLevel2)提供的一种将form表单元素name和value组合成键值,实现表单数据的序列化,从而减少from表单元素的拼......
  • vue按需加载组件,异步组件
    vue2按需加载组件,或者异步组件,主要是应用了component的is属性vue2中的动态组件component,官方文档<!--组件会在`currentTabComponent`改变时改变--><component......