我试图使用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
发布于 2017-08-23 18:52:06
阅读php://input并在parse_str()中运行它。基本上:
$MY_POST = null;
parse_str(file_get_contents('php://input'), $MY_POST);发布于 2019-06-18 10:04:57
Beacon使用的Content-Type头,取决于传递给sendBeacon第二个参数的实例类型。
应用程序/x-www-表单-urlencoded
若要发送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);应用程序/json
若要发送application/json头,请使用Blob并设置其类型。
var data = {
key : 'apples',
values : amountOfApples
};
var params = new Blob(
[JSON.stringify(data)],
{type : 'application/json'}
);
navigator.sendBeacon(anUrl, params);https://stackoverflow.com/questions/45847276
复制相似问题