我正在通过Javascript调用帖子请求,这是它的外观,
function syncDeviceId(deviceID, mod){
var request = new Request('url', {
method: 'POST',
body: JSON.stringify({
uuid: unique_id,
}),
mode: 'cors'
})
fetch(request).then(function(data) {
return
})
而我正试图改变这样的价值观,
$post['uuid'] = $_POST['uuid'];
?>
这将返回为空,如何从PHP中的fetch post请求中检索值.谢谢
解决方法:
这是因为您没有将Request的正文设置为正确的格式.
07001
body: Any body that you want to add to your request: this can be a
Blob, BufferSource, FormData, URLSearchParams, or USVString object.
Note that a request using the GET or HEAD method cannot have a body.
因此,将body设置为JSON字符串会使content-type标头成为text / plain.即使您将请求Content-Type设置为application / json也没关系,因为PHP默认情况下不知道如何解析传入的JSON请求有效负载(除非它最近在PHP 7中添加).
你可以在客户端做几件事
从对象创建一个FormData对象,并将其用作主体,将使用multipart / form内容类型
var data = {some:"data",even:"more"};
var fd = new FormData();
//very simply, doesn't handle complete objects
for(var i in data){
fd.append(i,data[i]);
}
var req = new Request("url",{
method:"POST",
body:fd,
mode:"cors"
});
创建一个URLSearchParams对象,将内容类型设置为application / x-www-form-urlencoded.注意:URLSearchParams不受广泛支持
//Similar to creating a simple FormData object
var data = {some:"data",even:"more"};
var params = new URLSearchParams();
for(i in data){
params.append(i,data[i]);
}
var req = new Request("url",{
method:"POST",
body:params,
mode:"cors"
});
创建一个查询字符串(即a = hello& b = world)并使用Headers对象将Content-Type设置为application / x-form-urlencoded
var data = {some:"data",even:"more"};
var headers = new Headers({
"Content-Type":"application/x-form-urlencoded"
});
var params = [];
for(i in data){
params.push(i + "=" + encodeURIComponent(data[i]));
}
var req = new Request("url",{
method:"POST",
body:params.join("&"),
headers:headers,
mode:"cors"
});
如果您仍想发送JSON有效负载而不是执行上述操作,则必须读取原始请求输入,然后使用json_decode获取数据
$json = file_get_contents('php://input');
$data = json_decode($json);
标签:php,javascript
来源: https://codeday.me/bug/20190609/1201578.html