Javascript获取api负载未交付
然而,我在php端得到了一个未定义的索引 其中php是: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',
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'];