文档表明sendBeacon通过 a 发送其数据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));
}
Run Code Online (Sandbox Code Playgroud)
后端:在我的 PHP 文件中
$rawValue = file_get_contents('php://input');
$data = json_decode($request);
Run Code Online (Sandbox Code Playgroud)
找到它需要很多尝试/错误,当时我找不到任何文档......
为了进入print_r($_POST,1);PHP,数据必须针对 HTTP POST 请求进行格式化:
window.onpagehide = function(event)
{
var fd = new FormData();
fd.append('ajax', 'beacon');
fd.append('name', 'John');
navigator.sendBeacon(path+'/beacon/', fd);
}
Run Code Online (Sandbox Code Playgroud)
这将在 PHP 中产生所需的结果print_r($_POST,1);。
此外...
数据来自navigator.sendBeacon于$HTTP_RAW_POST_DATA
| 归档时间: |
|
| 查看次数: |
1489 次 |
| 最近记录: |