首页 > 其他分享 >AJAX发送请求

AJAX发送请求

时间:2024-10-23 20:32:02浏览次数:1  
标签:XML console 请求 xhr 发送 XHR AJAX log

AJAX发送请求

◼ AJAX 是异步的JavaScript 和 XML(Asynchronous JavaScript And XML)
    它可以使用JSON,XML,HTML 和text 文本等格式发送和接收数据;
◼ 如何来完成AJAX请求呢?
  第一步:创建网络请求的AJAX对象(使用XMLHttpRequest)
  第二步:监听XMLHttpRequest对象状态的变化,或者监听onload事件(请求完成时触发);
  第三步:配置网络请求(通过open方法);
  第四步:发送send网络请求;
     //1.新建XMLHttpRequest实例对象
  const XHR = new XMLHttpRequest()
  //2.监听状态的改变(宏任务)
  XHR.onreadystatechange = function(){
    // console.log(XHR.response)
    //2.1 如果我们的状态不是DONE状态直接返回

    if(XHR.readyState !== XMLHttpRequest.DONE){return}
    // 将字符串转成JSON对象
    const resJSON = JSON.parse(XHR.response)
    const banners = resJSON.data.banner
    // console.log(resJSON)
    console.log(banners)
  }
  //3.配置请求
  /*
    1.method:请求方式(get/post/delete/put/patch...)
    2.url:请求的地址
  */
  XHR.open("get","http://123.207.32.32:8000/home/multidata")
  //4.发送请求("浏览器帮助我们发送请求")
  XHR.send()

XMLHttpRequest的state(状态)

  //1.新建XMLHttpRequest对象
  const XHR = new XMLHttpRequest()
  //2.监听状态的改变(宏任务)
  XHR.onreadystatechange = function(){
    //2.1 如果我们的状态不是DONE状态直接返回
    if(XHR.readyState !== XMLHttpRequest.DONE){return}
    // 2.2 确认拿到了数据
    // console.log(XHR.response)
    //2.3将拿到的字符串数据转化为对象
    const resJSON = JSON.parse(XHR.response)
    const lists = resJSON.data.banner.list
    console.log(resJSON)
    console.log(lists)
  }
  //3.配置请求
  /*
    1.method:请求方式(get/post/delete/put/patch...)
    2.url:请求的地址
    3.是否是异步的 true/异步,false/同步,默认是异步的
  */
  // 实际开发要使用异步请求:不会阻塞后续代码的运行
  XHR.open("get","http://123.207.32.32:8000/home/multidata",false)
  //4.发送请求("浏览器帮助我们发送请求")
  XHR.send()
  // 同步必须等待拿到结果执行
  // console.log(XHR.response)
  console.log("--------------")
  console.log("++++++++++++++")
  console.log("**************")

XMLHttpRequest其他事件监听

  ◼ 除了onreadystatechange还有其他的事件可以监听
      loadstart:请求开始。
      progress: 一个响应数据包到达,此时整个response body 都在response 中。
      abort:调用 xhr.abort() 取消了请求。
      error:发生连接错误,例如,域错误。不会发生诸如404 这类的HTTP 错误。
      load:请求成功完成。
      timeout:由于请求超时而取消了该请求(仅发生在设置了timeout 的情况下)。
      loadend:在 load,error,timeout 或 abort 之后触发。
  ◼ 我们也可以使用load来获取数据:
       // 使用onload请求数据
      XML.onload =function(){
        const resJSON = JSON.parse(XML.response)  
        const lists =resJSON.data.banner.list
        console.log(lists)
      }

响应数据和响应类型

◼ 发送了请求后,我们需要获取对应的结果:response属性
    XMLHttpRequest response 属性返回响应的正文内容;
    返回的类型取决于responseType的属性设置;
◼ 通过responseType可以设置获取数据的类型
    如果将responseType 的值设置为空字符串,则会使用text作为默认值。
◼ 和responseText、responseXML的区别:
    早期通常服务器返回的数据是普通的文本和XML,所以我们通常会通过responseText、responseXML来获取响应结果;
    之后将它们转化成JavaScript对象形式;
    目前服务器基本返回的都是json数据,直接设置为json即可;
     const XML= new XMLHttpRequest()
  XML.onload =function(){
    // 获取响应数据
    console.log(XML.response)
    // console.log(XML.responseText)
  }
  // 3.告知XHR获取到的数据的类型
    XML.responseType="json"
  //3.配置请求数据
  // XML.open("get","http://123.207.32.32:8000/home/multidata")//-->json
  XML.open("get","http://123.207.32.32:1888/01_basic/hello_json")//-->json
    // XML.open("get","http://123.207.32.32:1888/01_basic/hello_text")//-->text
    // XML.open("get","http://123.207.32.32:1888/01_basic/hello_xml")//-->xml
  //4.发送请求
  XML.send()

HTTP响应的状态status

◼XMLHttpRequest的state是用于记录xhr对象本身的状态变化,并非针对于HTTP的网络请求状态。
◼如果我们希望获取HTTP响应的网络状态,可以通过status和statusText来获取:
const xhr = new XMLHttpRequest()
xhr.onload =function(){
  console.log(xhr.response)
  console.log(xhr.status)//200
  console.log(xhr.statusText)//OK
}
xhr.responseType = "json"
xhr.open("get","http://123.207.32.32:1888/01_basic/hello_json")
xhr.send()

 const xhr = new XMLHttpRequest()
  xhr.onload =function(){
    console.log(xhr.response)
    // 根据状态码判断请求是否成功
    if(xhr.status >=200 && xhr.status<300){
      console.log(xhr.response)
    }else{
      console.log(xhr.status)//200
      console.log(xhr.statusText)//OK
    }
    
  }
  // xhr.onerror =function(){
  //   console.log("error",xhr.status,xhr.statusText)
  // }
  xhr.responseType = "json"
  xhr.open("get","http://123.207.32.32:8000/home/hello_json")
  // xhr.open("get","http://123.207.32.32:8000/home/multidata")
  xhr.send()

GET/POST请求传递参数

◼ 在开发中,我们使用最多的是GET和POST请求,在发送请求的过程中,我们也可以传递给服务器数据。
◼ 常见的传递给服务器数据的方式有如下几种:
    方式一:GET请求的query参数
    方式二:POST请求x-www-form-urlencoded 格式
    方式三:POST请求FormData格式
    方式四:POST请求JSON 格式

标签:XML,console,请求,xhr,发送,XHR,AJAX,log
From: https://www.cnblogs.com/hdc-web/p/18498056

相关文章

  • 隨筆 Kafka 异步发送机制解析
    Kafka异步发送机制解析与比喻        Kafka是一个高效的分布式消息系统,异步发送是其实现高吞吐量和低延迟的关键机制之一。为了更好地理解Kafka生产者的异步发送过程,我们将其比作一个旅客乘飞机前往目的地的故事。在这个故事中,生产者就像一个机场,负责将旅客(数据)送......
  • 腾讯地图web端请求报错113.该功能未授权
    问题描述:请求地址:https://apis.map.qq.com/jsapi?qt=geoc&addr=%2C%2C%2C&key=你的key&output=jsonp&pf=jsapi&ref=jsapi&cb=qq.maps._svcb3.geocoder0报错:qq.maps._svcb3.geocoder0&&qq.maps._svcb3.geocoder0({"status":113,"me......
  • Springboot集成阿里云短信实现短信发送功能(保姆级教程)
    Springboot集成阿里云短信实现短信发送功能概要Springboot集成阿里云短信实现短信发送功能涉及:pom引用,相关功能类,短信模板配置,demo方法等1,pom.xml<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2......
  • flask 接口还在执行中,前端接收到接口请求超时,解决方案
    在Flask中,当某个接口执行时间较长而导致前端请求超时时,需要考虑以下解决方案:1.优化接口的响应时间如果可能,先优化接口中的代码逻辑,减少处理时间。对于查询操作,可以考虑数据库索引优化、缓存机制等手段。2.增加请求超时时间如果接口确实需要较长时间完成,前端可以......
  • Java调用第三方接口、http请求详解,一文学会
    系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章Python机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据......
  • Scrapy | 通过爬取豆瓣Top250电影信息来学习在中间件中应用随机请求头和代理ip
    中间件的使用1.scrapyl中间件的分类和作用1.1scrapy中间件的分类1.2scrapy中间的作用:预处理request和response对象2.下载中间件的使用方法:3.定义实现随机User-Agent的下载中间件3.1实战:爬取豆瓣Top250电影信息3.2中间件使用实现随机User-Agent4.代理ip的使用4.1思......
  • [Python] Selenium监控网络请求
      Selenium监控网络有两种方式,第一种使用代理,第二张是使用CDP(ChromeDevToolsProtocol)协议,下面直接进入主题分别介绍如何使用代理和CDP协议监控网络请求。  一、使用Selenium-Wire设置代理拦截处理请求。  Selenium-Wire是基于Selenium开发的抓包工具,基本使用方式如下:fr......
  • Spring Boot 发送qq邮箱的步骤和方法
    先去qq邮箱开启POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,设置服务授权码邮箱==>账号==>管理服务==>开启服务==>生成授权码然后我们导入邮箱依赖<!--邮件发送依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-sta......
  • springboot接口Get请求实体类入参
    在springboot中,对HTTPGET请求,通常不会将请求体(body)作为主要的数据传输方式,因为GET请求通常用于请求数据,而不是发送数据到服务器(尽管从技术上讲,GET请求可以包含请求体,但这并不常见,也不符合RESTfulAPI的设计原则)。因此,对于GET请求的入参,通常不会使用@RequestBody注解。一、......
  • 分享一个大模型在请求api接口上的巧用
    前言自从Chatgpt横空出世以来,各种智能工具层出不穷,聊天、绘画、视频等各种工具帮助很多人高效的工作。作为一个开发者,目前常用应用包括代码自动填充,聊天助手等。这些是工具层面的使用,有没有将大模型和日常编码的前后端流程相结合使用的切入点呢?今天分享一个使用大模型自动调用a......