访问sendBeacon发送的数据

Mah*_*hks 3 javascript php

文档表明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

538*_*MEO 5

这是我如何做到的:

前端:在我的 .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)

找到它需要很多尝试/错误,当时我找不到任何文档......

  • 看起来有点晦涩,但这是我能找到的唯一有效的方法。 (4认同)

Joh*_*ohn 5

为了进入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);

此外...


Mah*_*hks 3

数据来自navigator.sendBeacon$HTTP_RAW_POST_DATA

  • 此功能在 PHP 5.6.0 中已弃用,并从 PHP 7.0.0 中删除。来源:http://php.net/manual/en/reserved.variables.httprawpostdata.php (6认同)