Javascript 获取 api 有效负载未交付

console.log("data ", data); // returns an object in JSON format {propertyName: propertyValue}

dataString = JSON.stringify(dataString); //correctly stringified json


let response = await fetch('updateRecevingEntry.php', 

                {

                method:'POST',

                headers: {'Content-Type':'application/json'}, 

                body: dataString

            }).then(response=>response.json()); 

但是我在 php 端返回了一个未定义的索引。


php在哪里:


$matkey = $_POST['materialKey'];

返回


<b>Notice</b>:  Undefined index: materialKey in <b>path/updateRecevingEntry.php</b> on line <b>3</b><br />

对于所有数据......没有一个被抓住。


那么为什么 _POST['propertyName'] 没有从正文中捕获 stringData 呢?


我尝试了一些变体,例如发送数据而不是与标头混淆的字符串数据,但我似乎无法弄清楚如何发送有效负载以便 _POST['propertyName'] 捕获数据身体。


我以前在 jquery 中使用过 $.ajax,它正在工作:但我正在重构它。


Fetch api对我来说是新的。我哪里错了。我也不想在 php 端解析 json 对象。


在阅读了一个答案后,我得到了它在一种情况下的工作,但是


        let response = await fetch('updateRecevingEntry.php', 

                {

                method:'POST',

                headers: {'Content-Type':'application/json'}, 

                body: sendData  

            }).then(response=>response.json()); 


和PHP


$postData = json_decode(file_get_contents("php://input"), true);

var_dump($postData);


只是返回一个大胖NULL。


编辑二:原来它实际上只需要通过 JSON.stringify(sendData) 进行编码。自从。它按预期工作。

倚天杖
浏览 49回答 1
1回答

慕仙森

我注意到的第一件事是您没有使用正确的变量(您正在使用stringData而不是dataString):dataString = JSON.stringify(dataString); //correctly stringified jsonlet response = await fetch('updateRecevingEntry.php', {&nbsp; &nbsp; method:'POST',&nbsp; &nbsp; headers: {'Content-Type':'application/json'},&nbsp;&nbsp; &nbsp; body: dataString&nbsp; &nbsp;&nbsp;}).then(response=>response.json());尽管您在使用 json 标头发送它时不需要对其进行字符串化。此外,您是否尝试过$_POST使用 ,而不是php://input?来自PHP.net:php://input 是一个只读流,允许您从请求正文中读取原始数据。对于 POST 请求,最好使用 php://input 而不是 $HTTP_RAW_POST_DATA,因为它不依赖于特殊的 php.ini 指令。此外,对于那些默认情况下不填充 $HTTP_RAW_POST_DATA 的情况,与激活 always_populate_raw_post_data 相比,它可能是一种内存密集度较低的替代方案。php://input 不适用于 enctype="multipart/form-data"。所以你会像这样使用它:$postData = json_decode(file_get_contents("php://input"), true);$matkey = $postData['materialKey'];这会将 POST 请求的主体读取为 JSON 字符串,然后将其转换为 PHP 数组。
打开App,查看更多内容
随时随地看视频慕课网APP