访问由sendBeacon发送的数据

Accessing data sent by sendBeacon

本文关键字:数据 sendBeacon 访问      更新时间:2023-09-26

文档表明sendBeacon通过HTTP POST request发送数据,但是在PHP中,$_POST变量似乎是一个空数组。

这是我的javascript代码:navigator.sendBeacon('beacon_log.php','My lost data')

我做错了什么?

更新:

发现,如果我使用navigator.sendBeacon('beacon_log.php?g_data=My data ok','Still lost!')我可以访问gdata与$_GET为什么会是当$_SERVER['REQUEST_METHOD']=POST ?

我是这样做的:

前端:在我的。js文件:

window.onbeforeunload = () => {
  navigator.sendBeacon('php/record-stats.php', JSON.stringify(stats));
}

后端:

$request = file_get_contents('php://input');
$data = json_decode($request);

我试了很多次才找到它,当时我找不到任何文档…

为了在PHP中获得print_r($_POST,1);,数据必须格式化用于HTTP POST请求:

window.onpagehide = function(event)
{
 var fd = new FormData(); 
 fd.append('ajax', 'beacon'); 
 fd.append('name', 'John'); 
 navigator.sendBeacon(path+'/beacon/', fd);
}

这将在PHP中生成print_r($_POST,1);所需的结果。

另外……

  • 不要在onbeforeunload时使用Beacon。
  • 不要使用带有WebKit/Safari的onvisibilitychange的Beacon。

navigator.sendBeacon的数据在$HTTP_RAW_POST_DATA