如何使用PHP中的fetch()API POST方法获取数据?

时间:2015-10-30 15:03:46

标签: fetch urlfetch fetch-api

我正在尝试使用fetch() API POST方法来获取PHP中的POST数据。

以下是我的尝试:

var x = "hello";
fetch(url,{method:'post',body:x}).then(function(response){
    return response.json();
});

PHP:

<?php
if(isset($_GET['x']))
{
    $get = $_GET['x'];
    echo $get;
}
?>

这是对的吗?

7 个答案:

答案 0 :(得分:10)

取决于:

如果你想要$_GET['x'],你需要在查询字符串中发送数据:

var url = '/your/url?x=hello';

fetch(url)
.then(function (response) {
  return response.text();
})
.then(function (body) {
  console.log(body);
});

如果您想要$_POST['x'],则需要将数据发送为FormData

var url = '/your/url';
var formData = new FormData();
formData.append('x', 'hello');

fetch(url, { method: 'POST', body: formData })
.then(function (response) {
  return response.text();
})
.then(function (body) {
  console.log(body);
});

答案 1 :(得分:8)

显然,当使用Fetch API将数据发送到PHP服务器时,您必须处理与您习惯的请求略有不同的请求。

您正在“发布”或“GETting”的数据在超级全局变量中不可用,因为此输入不是来自 多部分数据表格应用程序/ x-www-form-urlencoded

您可以通过阅读特殊文件php://input来获取数据,例如使用file_get_contents('php://input'),然后尝试使用json_decode()解码该输入。

希望它有所帮助。

你可以在这里阅读更多相关内容:

https://codepen.io/dericksozo/post/fetch-api-json-php

答案 2 :(得分:2)

我使用MDN中的postData函数:

ref

您可以只发布数据,但我希望收到一个成功的回复。

  return <div>
      {(function(){
        const C = MakeInput("textArea");
        return <C value={"Baz"} ref={textAreaRef} />
      })()}
  </div>;

答案 3 :(得分:2)

显示如何使用 FormData 使用 fetch api 添加两个数字的工作示例。

对于每个操作,你最好有不同的 FormData 和它自己的字段。

HTML:

<html>
<head></head>

<body>

<div id="numbers_addition">
    <input type="text" id="num1" placeholder="First Number">
    <input type="text" id="num2" placeholder="Second Number">
    <button type="button" onclick="addMyNumbers()">Add</button>
    <p id="result"></p>
</div>

<script id="script_add">

    function addMyNumbers()
    {
        let num1=document.getElementById("num1").value;
        let num2=document.getElementById("num2").value;
        opAddNumbers(num1, num2);
    }

    const frmAddNumbers = new FormData(); // create single instance
    frmAddNumbers.set('cmd', "add_numbers"); // this cmd will not change
    frmAddNumbers.set('first_number', "");
    frmAddNumbers.set('second_number', "");

    function opAddNumbers(num1, num2) {
        frmAddNumbers.set('first_number', num1);
        frmAddNumbers.set('second_number', num2);

        fetch('./cmd.inc.php', {method: 'POST', body: frmAddNumbers})
        .then(res => res.json()) // res.text()
        .then(res => displayResult(res))
        .catch(e => console.error('Error, opAddNumbers(), ' + e))
    }

    function displayResult(response)
    {
        console.log(response);
        document.getElementById("result").innerHTML = `Result = ${response["result"]}`;
    }

</script>

</body>
</html>

PHP ('cmd.inc.php'):

<?php

$cmd=$_POST['cmd'];

switch ($cmd) {
    case "add_numbers":
        $num1=$_POST['first_number'];
        $num2=$_POST['second_number'];
        $result = array("result" => $num1 + $num2);
        $output = json_encode($result);
      break;
  }

echo $output;

答案 4 :(得分:0)

请记住,PHP 中的 $_POST 仅抓取 formData()urlSearchParams() 数据,对于其他所有类型的数据,尤其是从其他文件或外部 api 数据导入的数据,您必须遵循脚步。 步骤:

  1. 在php中使用file_get_contents(php://input)接收数据
  2. 使用 json_decode($data) 对其进行解码 最后在读/写数据库之后
  3. 使用 json_encode($response) 发送响应。

很简单:-))

答案 5 :(得分:0)

如果碰巧您需要使用现有的服务器, 它是用 $_POST 编码的,并期望来自正常形式的参数, 未编码为 JSON, 您可以使用表单数据,这完全可以模拟表单。

let fd = new FormData();
fd.append("var1", val)
fd.append("var2", "Hello World");
fetch('/servers/server.php', {method: "POST", body: fd})

通过这种方式,您的服务器将像从普通表单输入字段一样接收 POSTed 字段。

$var1 = $_POST['var1']; $var2 = $_POST['var2'];

答案 6 :(得分:-1)

使用$_POST检索帖子变量。

$x = $_POST['x'];

undefined变量添加后备也是一种很好的做法。

$x = isset($_POST['x']) ? $_POST['x'] : 'default value';