我正在尝试使用POST
在beforeunload
事件上发送navigator.sendBeacon
请求,但数据无法访问PHP $_POST
。我认为这是因为在使用navigator.sendBeacon
时,标头Content-Type
始终设置为text/plain;charset=UTF-8
,但在我的情况下,因为我需要发送查询字符串,因此使用application/x-www-form-urlencoded
。
var amountOfApples = 0;
...
addEventListener("beforeunload", function(e) {
navigator.sendBeacon("save.php", "key=apples&value=" + amountOfApples);
});
如何执行此操作并确保标题设置为application/x-www-form-urlencoded
?
答案 0 :(得分:0)
阅读php://input
并通过parse_str()
运行。基本上是:
$MY_POST = null;
parse_str(file_get_contents('php://input'), $MY_POST);
答案 1 :(得分:0)
Content-Type
标头,取决于您传递给sendBeacon
第二个参数的实例类型。
要发送application/x-www-form-urlencoded
,请使用UrlSearchParams
实例。
var params = new URLSearchParams({
key : 'apples',
values : amountOfApples
});
navigator.sendBeacon(anUrl, params);
要发送multipart/form-data
标头,请使用FormData
实例。
var params = new FormData();
params.append('key', 'apples');
params.append('value', amountOfApples);
navigator.sendBeacon(anUrl, params);
要发送application/json
标头,请使用Blob
并设置其类型。
var data = {
key : 'apples',
values : amountOfApples
};
var params = new Blob(
[JSON.stringify(data)],
{type : 'application/json'}
);
navigator.sendBeacon(anUrl, params);