web网络请求与远程资源-XmlHttpRequest

这篇具有很好参考价值的文章主要介绍了web网络请求与远程资源-XmlHttpRequest。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
资源在:https://download.csdn.net/download/naozheyun2998/88916305
提示:以下是本篇文章正文内容,下面案例可供参考

一、ajax,fetch,axios 三者的区别

web网络请求与远程资源-XmlHttpRequest,http网络请求与远程资源,前端,网络,okhttp

三者都是用于网络请求,只不过是维度不同。

  1. ajax(Asynchronous JavaScript+XML),异步技术的统称;
  2. Fetch 是一个具体的api
  3. axios ,是一个第三方库,下载地址:https://www.npmjs.com/package/axios

第三方库里包含多个api。

二、XMLHttpRequest

XMLHttpRequest标准又分为Level 1和Level 2

Level1

缺点:

  1. 只支持文本数据的传送,无法用来读取和上传二进制文件。
  2. 传送和接收数据是,没有进度信息,只能提示有没有完成。
  3. 受到Same Origin Polic (通域限制),只能想同一域名的服务器请求数据。

使用方法:

三个参数:请求类型,请求url,请求是否异步;
第三个参数如果是:false,那么就是同步,会阻塞js 的进程;如果是true,那么就是异步,不会阻塞js 进程。

xhr.open("get",url,false)

xhr.open() 方法,只是为发送请求做准备,不会真的发送请求,必须调用xhr.send() 方法才行

xhr.open('get',url,false);
xhr.send(null)

才能发送。
封装成一个ajax 方法的示例:

function ajax1(url, callback) {
   
  const xhr = new XMLHttpRequest()
 
  xhr.onreadystatechange = function () {
   
    if (xhr.readyState == 4) {
   
      if (xhr.status == 200) {
   
        console.log("responseXML ",xhr.responseXML)
        if(xhr.responseXML){
   
          callback(xhr.responseText)
        }else if(xhr.responseText){
   
          callback(xhr.responseText)
        }
        
      }
    }
  }
   xhr.open('GET', url, false)
  xhr.send(null)
}

xhr.readyState

XMLHttpRequest对象的状态,等于4表示数据已经接收完毕。

readyState 0 1 2 3 4
含义 未初始化;尚未调用open()方法 已打开:已经调用open()方法,尚未调用send()方法 已发送:已经调用send()方法,尚未受到响应 接收中:已经收到部分响应 完成:已经收到所有响应,可以使用了

每次 readyState 从一个值变成另一个值,都会触发 readystatechange 事件。可以借此机会检查 readyState 的值。
为保证跨浏览器兼容,onreadystatechange 事件处理程序应该在调用 open()之前赋值。

问题:为什么不在xhr.onreadystatechange 里面使用this 呢?
回答:
因为xhr.onreadystatechange里面有作用域的问题。使用this 可能会导致功能失败或者错误。这个取决于用户使用的浏览器,因此还是使用xhr 对象保险一些。

function ajax1(url, callback) {
   
  const xhr = new XMLHttpRequest()
  
  xhr.onreadystatechange = function () {
   
    console.log("readyState",xhr.readyState)
    console.log("this",this)
    console.log("xhr",xhr)
    if (xhr.readyState == 4) {
   
      if (xhr.status == 200) {
   
        console.log("responseXML ",xhr.responseXML)
        if(xhr.responseXML){
   
          callback(xhr.responseText)
        }else if(xhr.responseText){
   
          callback(xhr.responseText)
        }
        
      }
    }
  }
  xhr.open('GET', url, false)
  xhr.send(null)
}

// 获取请求
function testxmlHttpRequest(){
   
  ajax1('http://192.168.1.4:3000/',callbackXmlHttpRequest)
}

// html
 <button onclick="testxmlHttpRequest()">xmlhttprequest</button>

web网络请求与远程资源-XmlHttpRequest,http网络请求与远程资源,前端,网络,okhttp
经过笔者测试,edge,chrome,safair 都支持,但是还是使用xhr 不要使用this 比较好。

xhr 接收响应数据的类型

注释 responseBody responseStream responseText responseXML
将响应信息正文以Unsigned Byte 数组形式返回 以ADO Stream 对象的形式返回响应信息 将响应信息作为字符串返回 将响应信息格式化为XML 文档格式返回

status 和statusText

xhr.status: 响应的HTTP 状态
xhr.statusText:响应的HTTP 状态描述

收到响应后,第一步检查xhr.status 的值,来确定响应成功返回。

http 状态码
  • 1xx:指示信息-表示请求已接收,继续处理;这类响应是临时响应
  • 2xx:成功-表示请求已被成功接收
  • 3xx:重定向-要完成请求必须进行更进一步的操作
  • 4xx:客户端错误-请求有语法错误或请求无法实现
  • 5xx:服务器错误-服务器未能实现合法的请求
    比如:
  • 200 OK:客户端请求成功
  • 202 Accepted 已接受,但是未处理成功
  • 204 请求处理成功,但是没有资源返回
  • 206 Partial Content:客户发送了一个带有Range头的GET请求,服务器完成了它
  • 301 Moved Permanently:永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替。
  • 302 Found:临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
  • 303 303和302状态码有着相同的功能,但是303明确表示客户端应当采用get方法获取资源
  • 304 Not Modified:客户端有缓冲的文档并发出了一个条件性的请求,服务器告诉客户原来缓冲的文档还可以继续使用
  • 305 Use Proxy: 使用代理。所请求的资源必须通过代理访问
  • 307 Temporary Redirect:临时重定向。与302类似。使用GET请求重定向
  • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解
  • 401 Unauthorized:请求未经授权,这个状态代码必须和WW-Authenticate报头域一起使用
  • 403 Forbidden:对被请求页面的访问被禁止
  • 404 Not Found:请求资源不存在
  • 500 Internal Server Error:服务器发生不可预期的错误原来缓冲的文档还可以继续使用
  • 502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求
  • 503 Server Unavailable:请求未完成,服务器临时过载或当机,一段时间后可能恢复正常
为什么要使用xhr.status 而不是使用xhr.statusText

因为statusText 属性,已经在跨浏览器的情况下,证明是不可靠的了。

xhr.send()

xhr.send() 方法,接收一个参数,这个参数是作为作为请求体的数据发送给服务端的。不如不发送这个请求体数据,那么就必须传null。
调用这个方法后,XHR 对象会停止触发事件,并阻止访问这个对象上任何与响应相关的属性。中
断请求后,应该取消对 XHR 对象的引用。由于内存问题,不推荐重(chong)用 XHR 对象。

xhr.abort()

在收到响应之前如果想取消异步请求,可以调用 abort()方法:

xhr.abort();

调用这个方法后,XHR 对象会停止触发事件,并阻止访问这个对象上任何与响应相关的属性。中
断请求后,应该取消对 XHR 对象的引用。由于内存问题,不推荐重用 XHR 对象。
web网络请求与远程资源-XmlHttpRequest,http网络请求与远程资源,前端,网络,okhttp

cors 问题

注意 只能访问同源 URL,也就是域名相同、端口相同、协议相同。如果请求的 URL 与
发送请求的页面在任何方面有所不同,则会抛出安全错误。
报错如下:文章来源地址https://www.toymoban.com/news/detail-845478.html

Access to XMLHttp

到了这里,关于web网络请求与远程资源-XmlHttpRequest的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • XMLHttpRequest 请求失败也需要给出提示

    是的,当XMLHttpRequest请求失败时,给用户一个提示是一个好的做法。这可以帮助用户了解请求是否成功,如果请求失败,他们可以采取适当的行动,例如重新发送请求或与技术支持联系。 以下是一些可能导致XMLHttpRequest请求失败的常见原因: 网络连接问题:如果用户的网络连

    2024年02月12日
    浏览(35)
  • 在 javascript 中使用 xmlHttpRequest 发送 POST 请求

    本文将通过不同的示例解释如何使用 JavaScript 代码在 AJAX 编程中发送 XMLHttpRequest post 请求。 要从 Web 服务器获取数据,我们使用 XMLHttpRequest (XHR)。 它是一种对象形式的 API,可在 Web 浏览器和 Web 服务器之间传输数据。 XMLHttpRequest 主要用于 AJAX 编程。 AJAX编程 AJAX 代表异步 Ja

    2024年02月12日
    浏览(33)
  • SpringBoot -05 SpringBoot web相关配置(静态资源访问、统一异常处理、文件上传、拦截器、统一跨域请求处理)

    小总结 SpringBoot是一个基于Spring的工具集,去帮我们完成了大量的配置。在SpringBoot中有一个约定大于配置的概念,就是他把我们很多第三方框架帮我们写好了,而且把我们整个第三方框架所需要的依赖全都通过起步依赖加进去了。开发中只需要加入起步依赖就可以实现某个场

    2024年02月01日
    浏览(36)
  • 5.Python-使用XMLHttpRequest对象来发送Ajax请求

    题记          使用XMLHttpRequest对象来发送Ajax请求,以下是一个简单的实例和操作过程。 安装flask模块          pip install flask  安装mysql.connector模块          pip install mysql-connector-python  编写app.py文件          app.py文件如下:     编写index.html          注意:i

    2024年02月07日
    浏览(27)
  • 如何使用Net2FTP轻松部署本地Web文件管理器并远程访问管理内网资源?

    文件传输可以说是互联网最主要的应用之一,特别是智能设备的大面积使用,无论是个人存储文件资料,还是商业文件流转,都有数据存储和传输的需求。有需求就有市场,相应的传输软件层出不穷,而这些软件也各有各的特色,在这些软件的加持下,我们可以轻松的将不方

    2024年02月05日
    浏览(35)
  • 原生js XMLHttpRequest发送 get post 请求 解决跨域 及 注意事项

    2、使用xhr发起GET请求 四个步骤: ①:创建 xhr对象 ②:调用 xhr的open()函数(open中传递两个参数,参数一是GET/POST请求方式,参数二是请求的URL地址) ③:调用 xhr.send()函数 ④:监听 xhr.onreadystatechange事件 xhr发起GET请求的完整代码 直接上示例 报错内容是这个 Failed to execute

    2024年02月16日
    浏览(39)
  • AJAX 使用 JavaScript 的 `XMLHttpRequest` 对象来向服务器发送异步请求

    AJAX 是一种使用异步 HTTP (Ajax) 请求获取和发送数据的技术。它使得网页能够进行异步更新,而不需要重新加载整个页面。通过使用 AJAX,可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。 AJAX 使用 JavaScript 的 XMLHttpRequest 对象来向服务器发送异步请

    2024年01月16日
    浏览(45)
  • 已拦截跨源请求:同源策略禁止读取位于 http://xxx...aliyuncs.com/ 的远程资源。(原因:CORS 头缺少 ‘Access-Control-Allow-Origin‘)

    在SpringBoot项目中使用阿里云OSS上传文件时,浏览器控制台报错: 原因:在阿里云终端没有设置跨域规则 解决方法: 进入阿里云官网,进入OSS控制台,在Bucket 列表中选择你使用的Bucket 。点击左侧的数据安全,跨域设置,创建跨域规则。具体如下图所示。 再次尝试上传文件,

    2024年02月07日
    浏览(27)
  • 网络知识整合——Web页面请求的历程

    下载一个Web页面。我们的场景: 一名学生Bob将他的便携机与学校的以太网交换机相连,下载一个 Web 页面(比如 www.google.com 主页) 。如我们所知,为满足这个看起来简单的请求,背后隐藏了许多细节。 1、七层参考模型及IP讲解 2、TCP三次握手讲解 3、TCP四次挥手讲解及抓包分析

    2024年02月16日
    浏览(29)
  • 谷歌 Access to XMLHttpRequest at ‘请求网站’ from origin ‘请求来源’ has been blocked by CORS policy: The reques

    谷歌 Access to XMLHttpRequest at ‘请求网站’ from origin ‘请求来源’ has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space private . 打开谷歌浏览器,在网址栏访问 chrome://flags/ 接着查询 Block insecure private network requests 查询后,修改为

    2024年01月18日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包