浏览器接收数据并处理

注意: 我们这里的接收数据并处理指的是,js通过ajax或者fetch方法,向服务器发送请求去获取数据,而不是js通过修改DOM的src="xxxxxx", 让元素发起请求,这是完全两回事。

处理方式

浏览器自动化处理时,它会根据http中响应头的content-type属性,将二进制数据进行对应的处理。

js代码处理时,处理方式就自己可控,没有那么依赖于content-type属性。

注意:编程时,不论前后端,都要保证正确配置content-type属性,这是良好的习惯

 数据类型

response有以下几种方法进行数据转换:

  • text()
  • json()
  • blob():在Web开发中,Blob(Binary Large Object)是一种二进制数据,可以用来表示各种类型的数据,如图像、音频、视频、文本等。
  • arrayBuffer()
  • formData()

这些方法执行都是异步的,会返回一个 Promise,这个 Promise 会在函数功能完成后调用resolve函数,该Promise中的PromiseState与PromiseResult复制给then生成的PromiseState与PromiseResult。示例如下:

fectch("http://xxxx")
    .then(res => res.text())
    .then(data => {
        console.log(data);
    })

场景

需要通过js代码进一步处理:

  • 文本文件,类文本文件如html、css、js、xml等这些文本进行处理,调用text()。
  • JSON文件,调用json()。
  • 多媒体文件, 比如说视频、音频、pdf等,调用arrayBuffer(),但非常少的时候,我们需要对其进行处理,大部分都是在后端进行的。
  • application/x-www-form-urlencoded, multipart/form-data等表单数据调用formData()。

展示在页面中/使用

  • 文本文件/类文本文件,调用text()。
  • 多媒体资源如图片音频视频/pdf等,可以使用blob(),然后生成url,再用img、video等标签的src,进行展示。如下所示:
async function getData() {
    const response = await fetch("http://localhost:3000/getmp4");
    const data = await response.blob();
    const url = URL.createObjectURL();
    cosnt video = document.querySelector("video");
    video.src = url;
    video.autoplay = true;
    console.log(url);
}
  • 图片还有一种处理方式,转换为base64,调用text()。如下所示:
async function getData() {
    const response = await fetch("http://localhost:3000/base64");
    const data = await response.text();
    const image = document.querySelector("img");
    img.src = "data:image/png;base64,${data}";
}

下载保存到电脑

也是需要Blob实例:

async function getData() {
    const response = await fetch("http://localhost:3000/getmp4");
    const data = await response.blob();
    const url = URL.createObjectURL(data);
    cosnt link = document.createElement("a");
    link.href = url;
    link.download = "zcz.png";
    link.click();
}

如果你想实现按钮点击下载的功能,可以click事件,然后做一个回调函数传进去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值