• 原生XMLHttpRequest发起请求


    XMLHttpRequest(xhr)是浏览器提供的Javascript对象,通过它,可以请求服务器上的数据资源。jQuery中的Ajax函数,就是基于xhr对象封装出来的。

    xhr发起GET请求

    1. 创建xhr对象
    2. 调用xhr.open()函数
    3. 调用xhr.send()函数
    4. 监听xhr.onreadystatechange事件
    1. //1、创建xhr对象
    2. let xhr = new XMLHttpRequest()
    3. //2、调用open函数 指定请求方式和URL地址 地址后面可以加上查询字符串 相当与data
    4. // xhr.open('GET','http://www.liulongbin.top:3006/api/getbooks')
    5. xhr.open('GET','http://www.liulongbin.top:3006/api/getbooks?bookname=西游记')
    6. //3、调用send函数 发起Ajax 请求
    7. xhr.send()
    8. //4、 监听onreadystatechange 事件
    9. xhr.onreadystatechange = function () {
    10. // 4.1 监听xhr 对象的请求状态 readyState 和服务器的相应状态 status 固定写法 这里的status 和 res 返回的不是同一个
    11. if (xhr.readyState === 4 && xhr.status === 200){
    12. // 4.2 打印服务器相应回来的数据 responseText
    13. let res = JSON.parse(xhr.responseText)
    14. //JSON.parse() 将JSON字符 转换成 对象数据
    15. console.log(res)
    16. }
    17. }

     xhr发起PSOT请求

    1. 创建xhr对象
    2. 调用xhr.open()函数
    3. 设置Content-Type属性(固定写法)
    4. 设置xhr.send()函数,同时指定要发送的数据
    5. 监听 xhr.onreadystatechange 事件
    1. //1、创建xhr对象
    2. let xhr2 = new XMLHttpRequest()
    3. //2、调用open函数 指定请求方式和URL地址
    4. xhr2.open('POST','http://www.liulongbin.top:3006/api/addbook')
    5. //3、设置Content-Type 属性(固定写法)
    6. xhr2.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
    7. //3、调用send函数 发起Ajax 请求 同时将数据以查询字符串的形式 发送给服务器
    8. xhr2.send('bookname=斗破苍穹&author=萧炎&publisher=土豆出版社')
    9. //4、 监听onreadystatechange 事件
    10. xhr2.onreadystatechange = function () {
    11. // 4.1 监听xhr 对象的请求状态 readyState 和服务器的相应状态 status 固定写法 这里的status 和 res 返回的不是同一个
    12. if (xhr2.readyState === 4 && xhr2.status === 200){
    13. // 4.2 打印服务器相应回来的数据 responseText
    14. let res = JSON.parse(xhr2.responseText)
    15. //JSON.parse() 将JSON字符 转换成 对象数据
    16. console.log(res)
    17. }
    18. }

     xhr对象的readystate状态

    状态描述
    0UNSENTXMLHttpRrequest对象已被创建,但尚未调用open方法
    1OPENDopen() 方法已被调用
    2HEADERS_RECEIVEDsend() 方法已被调用 响应头也已经被接收
    3LOADING数据接收中,此时response属性中已经包含部分数据
    4DONEAjax请求完成,这意味着数据传输已经彻底完成或失败

    http的响应状态码

    分类分类描述

    1**

    信息,服务器收到请求,需要请求者继续执行操作(很少遇到)
    2**成功,操作被成功接收并处理
    3**重定向,需要进一步操作以完成请求
    4**客户端错误,请求包含语法错误或无法完成请求
    5**服务器错误,服务器再处理请求的过程中发生了错误

     状态码细分

    状态码状态码英文名称中文描述
    200OK请求成功。一般用于GET与POST请求
    201

    Created

    已创建。成功请求并创建了新的资源,通常用于POST或PUT请求
    301

    Moved

    Permanently

    永久移动。请求的资源已被永久的移动到新的URL,返回信息会包括新的URL,浏览器会自动定向到新URL,今后的任何请求都应使用新的URL代替
    302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有url
    304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源(响应消息中不包含响应体)。客户端通常会缓存访问过的资源
    400Bad Request

    1.语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交整个请求

    2.请求参数有误

    401Unanthorized当前请求需要用户验证
    403Forbidden服务器已经理解请求,但是拒绝执行它
    404Not Found服务器无法根据客户端的请求找到资源
    408Resquest Timeout请求超时,服务器等待客户端发送的请求时间过长
    500Internal Server服务器内部错误,无法完成请求
    501Not Implemented服务器不支持该请求方法,无法完成请求。只有GET和HEAD请求方法是要求每个服务器必须支持的,其他请求方法在不支持的服务器上会返回501
    503Service Unavailable由于超载或者系统维护,服务器暂时无法处理客户端的请求

    url中的中文编码

    url地址中,只允许出现英文相关的字母、标点符号、数字、因此、在URL地址中不允许出现中字符如果URL中需要这样的字符 则必须对中文字符进行 编码(转义)

    浏览器提供了URL编码与解码的API

    encodeURI('守株待')

    输出字符串:%E5%AE%88%E6%A0%AA%E5%BE%85%E5%85%94

    decodeURI('%E5%85%94')

    输出字符串:

  • 相关阅读:
    HCIP- ICT实战进阶ex1-MPLS
    Oracle数据库预览框和实际数据不一致
    含文档+PPT+源码等]精品基于Uniapp实现的移动端的医生寻访平台的设计与实现[包运行成功]
    使用IDEA创建springboot
    Spring注解详解:@ComponentScan自动扫描组件使用
    自动驾驶行业观察之2023上海车展-----车企发展趋势(3)
    onnx-modifier使用
    前端研习录(09)——CSS浮动与清除浮动
    Leetcode75颜色分类
    Debug Python project managed by poetry under VSCode in attach mode
  • 原文地址:https://blog.csdn.net/benlalagang/article/details/126141160