翼度科技»论坛 编程开发 JavaScript 查看内容

Ajax 与 Axios 异步请求

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
Ajax 与 Axios 异步请求

一、服务器对外提供了哪些资源

1. 网页中如何请求数据
  1.         数据,也是服务器对外提供的一种资源。只要是资源,必然要通过 请求 – 处理 – 响应 的方式进行获取。如果要在网页中请求服务器上的数据资源,则需要用到 XMLHttpRequest 对象。XMLHttpRequest(简称 xhr)是浏览器提供的 js 成员,通过它,可以请求服务器上的数据资源。最简单的用法 var xhrObj = new XMLHttpRequest()
复制代码

2. 资源的请求方式

客户端请求服务器时,请求的方式有很多种,最常见的两种请求方式分别为 get 和 post 请求。


  • get 请求通常用于获取服务端资源(向服务器要资源)
    1. 例如:根据 URL 地址,从服务器获取 HTML 文件、css 文件、js文件、图片文件、数据资源等
    复制代码
  • post 请求通常用于向服务器提交数据(往服务器发送资源)
    1. 例如:登录时向服务器提交的登录信息、注册时向服务器提交的注册信息、添加用户时向服务器提交的用户信息等各种数据提交操作
    复制代码
二、Ajax 异步请求

1. 什么是Ajax
  1.         Ajax 的全称是 Asynchronous Javascript And XML(异步 JavaScript 和 XML)。通俗的理解:在网页中利用 XMLHttpRequest 对象和服务器进行数据交互的方式,就是Ajax。
  2.         浏览器中提供的 XMLHttpRequest 用法比较复杂,所以 jQuery 对 XMLHttpRequest 进行了封装,提供了一系列 Ajax 相关的函数,极大地降低了 Ajax 的使用难度
复制代码
2. 为什么要学Ajax
  1.         之前所学的技术,只能把网页做的更美观漂亮,或添加一些动画效果,但是,Ajax能让我们轻松实现网页与服务器之间的数据交互。
复制代码

3. Ajax的典型应用场景


  • 用户名检测:注册用户时,通过 ajax 的形式,动态检测用户名是否被占用
  • 搜索提示:当输入搜索关键字时,通过 ajax 的形式,动态加载搜索提示列表
  • 数据分页显示:当点击页码值的时候,通过 ajax 的形式,根据页码值动态刷新表格的数据
  • 数据的增删改查:数据的添加、删除、修改、查询操作,都需要通过 ajax 的形式,来实现数据的交互
4. Ajax 的应用


  • jQuery 中发起 Ajax 请求最常用的三个方法
    1. // get请求
    2. $.get()
    3. // post请求
    4. $.post()
    5. // 通用请求
    6. $.ajax()
    复制代码
  • $.get()函数的语法
    1. jQuery 中 $.get() 函数的功能单一,专门用来发起 get 请求,从而将服务器上的资源请求到客户端来进行使用。$.get() 函数的语法如下:
    复制代码

    • $.get() 函数的语法如下:
      1. $.get(url, [data], [callback])
      复制代码
    • 其中,三个参数各自代表的含义如下:
      参数名参数类型是否必选说明urlstring是要请求的资源地址dataobject否请求资源期间要携带的参数callbackfunction否请求成功时的回调函数
    • $.get()发起不带参数的请求
      1. // 使用 $.get() 函数发起不带参数的请求时,直接提供请求的 URL 地址和请求成功之后的回调函数即可:
      2. $.get("http://ajax-base-api-t.itheima.net/api/getbooks", function(res) {
      3.     console.log(res) // 这里的 res 是服务器返回的数据
      4. })
      复制代码
    • $.get()发起带参数的请求
      1. // 使用 $.get() 函数发起带参数的请求时,示例代码如下:
      2. $.get("http://ajax-base-api-t.itheima.net/api/getbooks", { id: 1 }, function(res) {
      3.   console.log(res)
      4. })
      复制代码

  • $.post()函数的语法
    1. jQuery 中 $.post() 函数的功能单一,专门用来发起 post 请求,从而向服务器提交数据。
    复制代码

    • $.post() 函数的语法如下:
      1. $.post(url, [data], [callback])
      复制代码
    • 其中,三个参数各自代表的含义如下:
      参数名参数类型是否必选说明urlstring是提交数据的地址dataobject否要提交的数据callbackfunction否数据提交成功时的回调函数
    • $.post()向服务器提交数据
      1. // 使用 $post() 向服务器提交数据的示例代码如下:
      2. $.post(
      3.    "http://ajax-base-api-t.itheima.net/api/addbook", // 请求的URL地址
      4.    { bookname: '水浒传', author: '施耐庵', publisher: '上海图书出版社' }, // 提交的数据
      5.    function(res) { // 回调函数
      6.       console.log(res)
      7.    }
      8. )
      复制代码

  • $.ajax()函数的语法
    1. 相比于 $.get() 和 $.post() 函数,jQuery 中提供的 $.ajax() 函数,是一个功能比较综合的函数,它允许我们对 Ajax 请求进行更详细的配置。
    复制代码

    • $.ajax() 函数的基本语法如下:
      1. $.ajax({
      2.    type: '', // 请求的方式,例如 GET 或 POST
      3.    url: '',  // 请求的 URL 地址
      4.    data: { },// 这次请求要携带的数据
      5.    success: function(res) { } // 请求成功之后的回调函数
      6. })
      复制代码
    • 使用$.ajax()发起GET请求
      1. // 使用 $.ajax() 发起 GET 请求时,只需要将 type 属性的值设置为 'GET' 即可:
      2. $.ajax({
      3.    type: 'GET', // 请求的方式
      4.    url: "http://ajax-base-api-t.itheima.net/api/getbooks",  // 请求的 URL 地址
      5.    data: { id: 1 },// 这次请求要携带的数据
      6.    success: function(res) { // 请求成功之后的回调函数
      7.        console.log(res)
      8.    }
      9. })
      复制代码

      • GET请求实战案例前后端交互

        • 前端代码
          1. <!DOCTYPE html>
          2. <html lang="en">
          3. <head>
          4.     <meta charset="UTF-8">
          5.     <title>加法运算</title>
          6.    
          7. </head>
          8. <body>
          9.    
          10.         <h3>ajax GET请求页面</h3>
          11.         <input type="text"> +
          12.         <input type="text"> =
          13.         <input type="text">
          14.         <input type="button" value="计算">
          15.    
          16.    
          17. </body>
          18. </html>
          复制代码
        • 后端代码
          1. import tornado.web
          2. import tornado.ioloop
          3. class MainHandler(tornado.web.RequestHandler):
          4.     def get(self):
          5.         self.render("calc_get.html")
          6. class ReferHandler(tornado.web.RequestHandler):
          7.     def get(self):
          8.         # print("请求头信息\n:", self.request.headers)
          9.         print("请求url: ", self.request.full_url())
          10.         # 获取原始查询参数和请求体参数
          11.         print("查询参数:", self.request.arguments)
          12.         print("请求体参数:", self.request.body)
          13.         # 框架解析之后的数据, 如果原始查询参数无数据则报错
          14.         num1 = self.get_argument("num1")
          15.         num2 = self.get_argument("num2")
          16.         # 通过url以键值对形式传参解析出来的数据均为字符串格式
          17.         print("接收的查询参数num1类型为", type(num1))
          18.         print("接收的查询参数num1, num2值为", num1, num2)
          19.         result = round(float(num1) + float(num2), 4)
          20.         # .write会检测参数,将字典转为json数据以后返回
          21.         self.write({"result": result})
          22. if __name__ == '__main__':
          23.     app = tornado.web.Application([
          24.         ("/", MainHandler),
          25.         ("/calc", ReferHandler),
          26.     ])
          27.     app.listen(8888)
          28.     tornado.ioloop.IOLoop.current().start()
          复制代码


    • 使用$.ajax()发起POST请求
      1. // 使用 $.ajax() 发起 POST 请求时,只需要将 type 属性的值设置为 'POST' 即可:
      2. $.ajax({
      3.    type: 'POST', // 请求的方式
      4.    url: "http://ajax-base-api-t.itheima.net/api/addbook",  // 请求的 URL 地址
      5.    data: { // 要提交给服务器的数据
      6.       bookname: '水浒传',
      7.       author: '施耐庵',
      8.       publisher: '上海图书出版社'
      9.     },
      10.    success: function(res) { // 请求成功之后的回调函数
      11.        console.log(res)
      12.    }
      13. })
      复制代码

      • POST请求实战案例前后端交互

        • 前端代码
          1. <!DOCTYPE html>
          2. <html lang="en">
          3. <head>
          4.     <meta charset="UTF-8">
          5.     <title>加法运算</title>
          6.    
          7. </head>
          8. <body>
          9.    
          10.         <h3>ajax POST请求页面</h3>
          11.         <input type="text"> +
          12.         <input type="text"> =
          13.         <input type="text">
          14.         <input type="button" value="计算">
          15.    
          16.    
          17. </body>
          18. </html>
          复制代码
        • 后端代码
          1. import json
          2. import tornado.web
          3. import tornado.ioloop
          4. class MainHandler(tornado.web.RequestHandler):
          5.     def get(self):
          6.         self.render("calc_post.html")
          7.     def post(self):
          8.         # print("请求头信息\n:", self.request.headers)
          9.         print("请求url: ", self.request.full_url())
          10.         # 获取原始查询参数和请求体参数
          11.         print("查询参数:", self.request.arguments)
          12.         print("请求体参数:", self.request.body)
          13.         # 框架解析之后的数据
          14.         data = json.loads(self.request.body)
          15.         num1 = data["num1"]
          16.         num2 = data["num2"]
          17.         print("接收的请求体参数num1类型为", type(num1))
          18.         print("接收的请求体参数num1, num2值为", num1, num2)
          19.         result = round(num1 + num2, 4)
          20.         # .write会检测参数,将字典转为json数据以后返回
          21.         self.write({"result": result})
          22. if __name__ == '__main__':
          23.     app = tornado.web.Application([
          24.         ("/", MainHandler),
          25.     ])
          26.     app.listen(8888)
          27.     tornado.ioloop.IOLoop.current().start()
          复制代码


    • ajax异步请求参数说明
      1. 【contentType】: 发送给服务器的数据格式; 可选4种格式:
      2.     1> application/x-www-form-urlencoded: 默认方式,在请求发送过程中会对数据进行序列化处理,以键值对形式 ?key1=value1&key2=value的方式发送到服务器
      3.     2> multipart/form-data: 需要在表单中进行文件上传时,就需要使用该格式
      4.     3> application/json: 消息主体是序列化后的 JSON 字符串
      5.     4> text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符
      6.     eg:
      7.         contentType:"application/json",
      8. 【dataType】: 用什么格式解析服务端响应的数据(并非是原生ajax的属性),有些框架(比如jquery)默认(未填写dataType或解析错误的情况下)读取服务端的响应头Content-Type
      9.     1> text:默认值。预期数据为纯文本字符串。
      10.     2> html:预期数据为html格式的字符串。
      11.     3> json:预期数据为JSON格式的对象或数组。
      12.     4> xml:预期数据为XML文档类型的数据。
      13.     说明: 指定dataType参数后,如果返回的数据类型与预期不符合,则ajax请求会失败,并触发error回调函数。因此,正确指定dataType参数对于确保ajax请求的数据类型是非常重要的。
      14. 【jquery ajax 出错信息解读-error属性值】
      15.     1> readyState :当前状态,0-未初始化,1-正在载入,2-已经载入,3-数据进行交互,4-完成。
      16.     2> status :返回的HTTP状态码,比如常见的404,500等错误代码。
      17.     3> statusText :对应状态码的错误信息,比如404错误信息是not found,500是Internal Server Error。
      18.     4> responseText :服务器响应返回的文本信息
      复制代码

三、 Axios 异步请求

1. 什么是axios
  1. Axios 是基于Promise的HTTP客户端作用于浏览器和node.js,专注于网络数据请求的库。相比于原生的 XMLHttpRequest 对象,axios 简单易用。相比于 jQuery,axios 更加轻量化,只专注于网络数据请求。
复制代码
2. axios 的应用


  • axios 发起GET请求

    • axios 发起 get 请求的语法:
      1. axios.get('url', { params: { /*参数*/ } }).then(callback)
      复制代码
    • 具体的请求示例如下:
      1. // 请求的 URL 地址
      2. var url = 'http://ajax-base-api-t.itheima.net/api/get'
      3. // 请求的参数对象
      4. var paramsObj = { name: 'zs', age: 20 }
      5. // 调用 axios.get() 发起 GET 请求
      6. axios.get(url, { params: paramsObj }).then(function(res) {
      7.      // res.data 是服务器返回的数据
      8.      var result = res.data
      9.      console.log(res)
      10. })
      复制代码

  • axios发起POST请求

    • axios 发起 post 请求的语法:
      1. axios.post('url', { /*参数*/ }).then(callback)
      复制代码
    • 具体的请求示例如下:
      1. // 请求的 URL 地址
      2. var url = 'http://ajax-base-api-t.itheima.net/api/post'
      3. // 要提交到服务器的数据
      4. var dataObj = { location: '北京', address: '顺义' }
      5. // 调用 axios.post() 发起 POST 请求
      6. axios.post(url, dataObj).then(function(res) {
      7.      // res.data 是服务器返回的数据
      8.      var result = res.data
      9.      console.log(result)
      10. })
      复制代码

  • 直接使用axios发起请求

    • 直接使用axios发起请求 ,axios 也提供了类似于jQuery中 $.ajax() 的函数,语法如下:
      1. axios({
      2.      method: '请求类型',
      3.      url: '请求的URL地址',
      4.      data: { /* POST数据 */ },
      5.      params: { /* GET参数 */ }
      6. }) .then(callback)
      复制代码
    • 直接使用axios发起GET请求
      1.    
      2. axios({
      3.      method: 'GET',
      4.      url: 'http://www.liulongbin.top:3006/api/get',
      5.      params: { // GET 参数要通过 params 属性提供
      6.          name: 'zs',
      7.          age: 20
      8.      }
      9. }).then(function(res) {
      10.      console.log(res.data)
      11. })
      复制代码
    • 直接使用axios发起POST请求
      1. axios({
      2.      method: 'POST',
      3.      url: 'http://www.liulongbin.top:3006/api/post',
      4.      data: { // POST 数据要通过 data 属性提供
      5.          bookname: '程序员的自我修养',
      6.          price: 666
      7.      }
      8. }).then(function(res) {
      9.      console.log(res.data)
      10. })
      复制代码

四、 接口


  • 接口的概念
    1. 使用 Ajax 请求数据时,被请求的 URL 地址,就叫做数据接口(简称接口)。同时,每个接口必须有请求方式。
    2. 例如:
    3.         http://ajax-base-api-t.itheima.net/api/getbooks  获取图书列表的接口(GET请求)
    4.         http://ajax-base-api-t.itheima.net/api/addbook   添加图书的接口(POST请求)
    复制代码
  • 接口的请求过程


  • 接口文档

    • 什么是接口文档
      1. 接口文档,顾名思义就是接口的说明文档,它是我们调用接口的依据。好的接口文档包含了对接口URL,参数以及输出内容的说明,我们参照接口文档就能方便的知道接口的作用,以及接口如何进行调用。
      复制代码
    • 接口文档的组成部分
      1. 接口文档可以包含很多信息,也可以按需进行精简,不过,一个合格的接口文档,应该包含以下6项内容,从而为接口的调用提供依据:
      复制代码

      • 接口名称:用来标识各个接口的简单说明,如登录接口,获取图书列表接口等。
      • 接口URL:接口的调用地址
      • 调用方式:接口的调用方式,如 GET 或 POST
      • 参数格式:接口需要传递的参数,每个参数必须包含参数名称、参数类型、是否必选、参数说明这4项内容
      • 响应格式:接口的返回值的详细描述,一般包含数据名称、数据类型、说明3项内容。
      • 返回示例(可选):通过对象的形式,例举服务器返回数据的结构。

    • 接口文档示例

      • 图书列表

        • 接口URL:  /api/getbooks
        • 调用方式: GET
        • 参数格式 - PTND
          参数名称(params)参数类型(type)是否必选(necessary)参数说明(description)idNumber否图书IdbooknameString否图书名称authorString否作者publisherString否出版社
        • 响应格式 - PTD
          数据名称数据类型说明statusNumber200 成功;500 失败;msgString对 status 字段的详细说明dataArray图书列表+idNumber图书Id+booknameString图书名称+authorString作者+publisherString出版社
        • 返回示例
          1. {
          2.   "status": 200,
          3.   "msg": "获取图书列表成功",
          4.   "data": [
          5.     { "id": 1, "bookname": "西游记", "author": "吴承恩", "publisher": "北京图书出版社" },
          6.     { "id": 2, "bookname": "红楼梦", "author": "曹雪芹", "publisher": "上海图书出版社" },
          7.     { "id": 3, "bookname": "三国演义", "author": "罗贯中", "publisher": "北京图书出版社" }
          8.   ]
          9. }
          复制代码




来源:https://www.cnblogs.com/cs-songbai/p/18102073
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具