解析PHP中的Javascript提取

时间:2016-01-29 18:43:03

标签: javascript php

我通过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
  })

我试图像这样修改价值观,

<?php

$post['uuid'] = $_POST['uuid']; 

?>

这是空的,我如何从PHP中的fetch post请求中检索值。感谢

3 个答案:

答案 0 :(得分:4)

这是因为您没有将Request的正文设置为正确的格式。

  

https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#Parameters

     

正文:您要添加到请求中的任何正文:这可以是一个   Blob,BufferSource,FormData,URLSearchParams或USVString对象。   请注意,使用GET或HEAD方法的请求不能包含正文。

The content-type header is based on the object set to body, or to the Content-Type specified in a Header object if supplied.

因此,将body设置为JSON字符串会使内容类型标头为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);

答案 1 :(得分:1)

您需要回显结果,因此会在您的请求正文中返回:

<?php

$post['uuid'] = $_POST['uuid']; 
echo $post['uuid'];
?>

此外,看起来您需要使用您正在调用的php脚本的url来实例化您的请求对象:

var request = new Request('my_script.php', { . . .

你的php脚本在哪里。

答案 2 :(得分:1)

我也遇到了同样的问题。

我首先使用Chrome调试工具来确保我传递了请求正文(chrome调试将调用“请求有效载荷”) 我正在发送

{ClientDomain: "example.com"}

然后我在接收的PHP脚本中使用了规定的代码。

$json = file_get_contents('php://input');
$data = json_decode($json);

然后将我的JSON代码放入一个数组中,然后可以在PHP中读取它。

PRINT $data["ClientDomain"];

我希望这对下一个家伙有帮助。