文档指示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!')
我可以使用$_GET
访问gdata为什么会在$_SERVER['REQUEST_METHOD']=POST
?
答案 0 :(得分:4)
这是我的操作方法:
前端:在我的.js文件中:
window.onbeforeunload = () => {
navigator.sendBeacon('php/record-stats.php', JSON.stringify(stats));
}
后端:在我的PHP文件中
$rawValue = file_get_contents('php://input');
$data = json_decode($request);
找到它的过程很繁琐,我当时找不到任何文档...
答案 1 :(得分:1)
来自navigator.sendBeacon
的数据可在$HTTP_RAW_POST_DATA
答案 2 :(得分:0)
为了在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);
带来所需的结果。
另外...