首页 > 其他分享 >【推荐】navigator.sendBeacon() 异步发送数据

【推荐】navigator.sendBeacon() 异步发送数据

时间:2022-12-16 15:56:42浏览次数:56  
标签:异步 const url sendBeacon 发送数据 navigator data

navigator.sendBeacon() 异步发送数据

navigator.sendBeacon()方法可用于通过HTTP将少量数据异步传输到Web服务器。

使用sendBeacon() 方法会使用户代理在有机会时异步地向服务器发送数据,同时不会延迟页面的卸载或影响下一导航的载入性能。这就解决了提交分析数据时的所有的问题:数据可靠,传输异步并且不会影响下一页面的加载。此外,代码实际上还要比其他技术简单许多!

const sendBeacon = (url, data = {}) => {
  const joinedQueue = navigator.sendBeacon(url, JSON.stringify(data));
  console.log('用户代理把数据加入传输队列' + (joinedQueue ? '成功' : '失败'));
}

sendBeacon()是以Http POST方法发送请求的。

sendBeacon()第二个参数可接受ArrayBufferView、Blob、FormData、DOMString类型的数据。

sendBeacon()会根据传入的数据自动设置请求头,数据类型和对应Content-Type如下:

  • Formdata:multipart/form-data
  • DOMString:text/plain

如果想传递json数据到后端,没法直接设置请求头的Content-Type,因此需要明确告诉后端开发人员你传递的是json格式的数据。

但是可以通过构建Blob对象间接达到设置Content-Type的效果。

const sendBeacon= (url, data = {}) => {
  const blob = new Blob([JSON.stringify(data)], {
    type: 'application/json; charset=UTF-8',
  });
  return navigator.sendBeacon(url, blob);
};

 

通过Blob也可以发送其他MIME type的数据。

如果浏览器不支持sendBeacon()则回退到同步的XMLHttpRequest:

function sendReport(url, data) {
  if (navigator.sendBeacon) {
    const joinedQueue = sendBeacon(url, data);
    if (!joinedQueue) {
      syncRequest(url, data);
    }
  } else {
    syncRequest(url, data);
  }
}

 



引用自:https://www.cnblogs.com/sybboy/p/16469617.html

标签:异步,const,url,sendBeacon,发送数据,navigator,data
From: https://www.cnblogs.com/overspread/p/16987569.html

相关文章

  • stm32f407VET6 串口(usart1)基本操作,【发送数据 + 接收数据】
    完整代码:#include"stm32f4xx.h"#include"delay.h"#include"led.h"#include"usart.h"/**说明:*串口程序*实现发送任意一个字节数据给电脑*电脑发送00/......
  • C++模拟按键和发送数据
    ZjlAj.h  #pragmaonce #include"stdafx.h"   #defineZJL_TEXT_T("RFSettingV3.47")   enum{NOS_COM=0X20000,N......
  • Anaconda navigator 打不开?打开没反应问题?
    ​​Anaconda​​navigator打不开的解决方案当你想打开Anacondanavigator的时候,出现下图所示,anaconda已经在运行,但是你在任务管理器里却无法查看的,此时我们可以选择用CMD......
  • postman 模拟json发送数据
    https://www.onlinedown.net/article/10021411.htm  在地址栏里输入请求:127.0.0.1:8081/getmoney      选择“POST”方式。      在“headers”添加ke......
  • Anaconda Navigator启动闪退
    问题描述win10新装的AnacondaNavigator启动闪退,且JupyterNotebook启动dos也会有大量警告。解决方法通过软件升级,依次输入如下命令:condaupdatecondacondaupdateanacond......
  • 32. JS Navigator对象:获取浏览器信息
    1.前言JavaScriptnavigator对象中存储了与浏览器相关的信息,例如名称、版本等,我们可以通过window对象的navigator属性(即window.navigator)来引用navigator对象,并......
  • UDP发送数据、接收数据及UDP通信程序练习
    目录​​一、UDP发送数据​​​​二、UDP接收数据​​​​三、UDP通信程序练习​​一、UDP发送数据Java中的UDP通信:●UDP协议是一种不可靠的网络协议,它在通信的两端各建立......
  • TCP发送数据、接受数据及TCP通信程序练习
    目录​​一、TCP发送数据​​​​二、TCP接收数据​​​​三、TCP通信程序练习​​一、TCP发送数据Java中的TCP通信:Java对于基于TCP协议的网络提供了良好的封装,使用Socket对......
  • Navigator 对象,Screen 对象。
    作者|阮一峰​​window.navigator​​属性指向一个包含浏览器和系统信息的Navigator对象。脚本通过这个属性了解用户的环境信息。1、Navigator对象的属性1.1、Navigato......
  • [答疑]这个消息名是写发送数据还是接收数据
    ​​软件方法(下)分析和设计第8章连载[20210723更新]>>​​睡鱼(61***11)16:08:29 睡鱼(61***11)16:08:58他们说这个图有问题UML菜鸟(1***22)16:10:55有点暗睡鱼(61***11)......