首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有应用程序/x-www-form-urlencoded的navigator.sendBeacon

带有应用程序/x-www-form-urlencoded的navigator.sendBeacon
EN

Stack Overflow用户
提问于 2017-08-23 18:46:10
回答 2查看 3K关注 0票数 4

我试图使用POSTbeforeunload事件上发送一个navigator.sendBeacon请求,但是数据没有到达PHP$_POST。我认为这是因为在使用navigator.sendBeacon时,头Content-Type总是设置为text/plain;charset=UTF-8,但在我的情况下,因为我需要发送查询字符串,因此需要使用application/x-www-form-urlencoded

代码语言:javascript
复制
var amountOfApples = 0;

...

addEventListener("beforeunload", function(e) {
    navigator.sendBeacon("save.php", "key=apples&value=" + amountOfApples);
});

如何做到这一点,并确保标头设置为application/x-www-form-urlencoded

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-23 18:52:06

阅读php://input并在parse_str()中运行它。基本上:

代码语言:javascript
复制
$MY_POST = null;
parse_str(file_get_contents('php://input'), $MY_POST);
票数 1
EN

Stack Overflow用户

发布于 2019-06-18 10:04:57

Beacon使用的Content-Type头,取决于传递给sendBeacon第二个参数的实例类型。

应用程序/x-www-表单-urlencoded

若要发送application/x-www-form-urlencoded,请使用UrlSearchParams实例。

代码语言:javascript
复制
var params = new URLSearchParams({
   key : 'apples',
   values : amountOfApples
});
navigator.sendBeacon(anUrl, params);

多部分/表格-数据

若要发送multipart/form-data头,请使用FormData实例。

代码语言:javascript
复制
var params = new FormData();
params.append('key', 'apples');
params.append('value', amountOfApples);
navigator.sendBeacon(anUrl, params);

应用程序/json

若要发送application/json头,请使用Blob并设置其类型。

代码语言:javascript
复制
var data = {
   key : 'apples',
   values : amountOfApples
};

var params = new Blob(
    [JSON.stringify(data)], 
    {type : 'application/json'}
);
navigator.sendBeacon(anUrl, params);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45847276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档