为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript 获取 api 有效负载未交付

Javascript 获取 api 有效负载未交付

PHP
倚天杖 2022-10-22 16:22:51
console.log("data ", data); // returns an object in JSON format {propertyName: propertyValue}dataString = JSON.stringify(dataString); //correctly stringified jsonlet 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) 进行编码。自从。它按预期工作。
查看完整描述

1 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

我注意到的第一件事是您没有使用正确的变量(您正在使用stringData而不是dataString):


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());

尽管您在使用 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 数组。


查看完整回答
反对 回复 2022-10-22
  • 1 回答
  • 0 关注
  • 47 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信