t28.dev

sendBeaconでjson形式のデータを送る

2021/7/4
Tech

なにこれ

sendBeacon() で送るデータを json 形式で送るための tips


sendBeacon()

sendBeacon() は文書のアンロードに関わらず、確実にデータを送信したいときに便利です。 送るデータが複数ある場合は(そうでないときも)、やっぱりデータは JSON 形式で送りたいですよね。

navigator.sendBeacon(url, data);
data: 送るデータを含む …(略)… Blob, …(略)… のいずれかのオブジェクトです。

sendBeacon()Blob を受け取るので、JSON 形式のデータを持つ Blob を作成します。

JSON から Blob を作成する

Blob() コンストラクタは、他のオブジェクトから Blob を作成することができます。

const obj = { hello: "world" };
const blob = new Blob([JSON.stringify(obj, null, 2)], {
  type: "application/json",
});

こんな感じのメソッドを使ってる

const sendBeaconWithJson = (json) => {
  const data = new Blob([JSON.stringify(json)], {
    type: "application/json",
  });
  return navigator.sendBeacon(`/any/path`, data);
};