Javascript获取api负载未交付

Javascript获取api负载未交付,javascript,php,json,post,fetch,Javascript,Php,Json,Post,Fetch,然而,我在php端得到了一个未定义的索引 其中php是: 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',

然而,我在php端得到了一个未定义的索引

其中php是:

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

$matkey = $_POST['materialKey'];
还有php

        let response = await fetch('updateRecevingEntry.php', 
                {
                method:'POST',
                headers: {'Content-Type':'application/json'}, 
                body: sendData  
            }).then(response=>response.json()); 

只返回一个大的fat空值


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

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

虽然在使用json头发送时不需要对其进行字符串化


此外,您是否尝试过使用
php://input

发件人:

php://input 是一个只读流,允许您从请求主体读取原始数据。在POST请求的情况下,最好使用php://input 而不是$HTTP_RAW_POST_数据,因为它不依赖于特殊的php.ini指令。此外,对于默认情况下未填充$HTTP_RAW_POST_数据的情况,它可能是一种比激活always_populate_RAW_POST_数据占用更少内存的替代方法。php://input 不适用于enctype=“多部分/表单数据”

所以你可以这样使用它:

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

这将POST请求的主体作为JSON字符串读取,然后将其转换为PHP数组。

var\u dump($\u POST)
很可能是json编码的,在这种情况下,您需要先对其进行解码,这就是我一直避免的,无论如何,要正确发送它,这样我就不会在php端解析json对象了?
json。stringify
就是您编码它的地方。试着在没有这个的情况下发送它。是的,错别字是从发布到这里的,我现在要纠正它。这很有效。当它使用json_解码时,就可以了。但是如何编写一个获取请求,以便发送一个对象并让它正确地填充_POST['propertyName']?为了使$\u POST工作,数据需要以
FormData
而不是
JSON
的形式发送,但我不明白为什么在php://input 给你同样的结果。如果答案有效,请随意将其标记为已接受的答案:)
$postData = json_decode(file_get_contents("php://input"), true);
var_dump($postData);

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());
$postData = json_decode(file_get_contents("php://input"), true);
$matkey = $postData['materialKey'];