Как в php распарсить json объект без первого параметра post?
Отправляю данные с помощью строки json.
async function sender() {
const url = "file.php";
try {
const response = await fetch(url, {
method: 'POST',
//body: ('param=' + JSON.stringify(object)),
body: JSON.stringify(object), // {"name":"John","surname":"Smith"}
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
const json = await response.text();
console.log(json);
} catch (error) {
console.error('Ошибка:', error);
}
}
var_dump($_POST) выводит
array(1) {
["{"name":"John","surname":"Smith"}"]=>
string(0) ""
}
Как вывести отдельно ключ и отдельно значение?
Чтобы дальше оперировать ими.
Пробовал так:
echo $_POST; // Array
echo $_POST[0]; // пусто
echo $_POST[name]; // пусто
echo $_POST->name; // пусто
echo json_decode($_POST); // json_decode() expects parameter 1 to be string, array given
echo json_encode($_POST); // Array{"{\"name\":\"John\",\"surname\":\"Smith\"}":""}
p.s. до этого отправлял с параметром, все в порядке
body: ('param=' + JSON.stringify(object)) // param={"name":"John","surname":"Smith"}
и выводил так
$param = json_decode($_REQUEST["param"]);
echo $param->name; // John
Ответы (1 шт):
Вы отправляете JSON не в значении, а в ключе, поэтому у вас $_POST как-будто ничего не содержит. Но на самом деле там ключ называется '{"name":"John","surname":"Smith"}', чего быть не должно. Возможно причина в том, что тип содержимого application/x-www-form-urlencoded, хотя в body простая строка, то есть нет названия поля коль уж это форма.
Вот пример отправки данных fetch-ем:
let formData = new FormData();
formData.append( 'param', JSON.stringify({ a:1, b:2 }) );
const response = fetch(
'http://your-domain-example.com',
{
method: 'POST',
body: formData,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}
)
То есть если отправляете с типом application/x-www-form-urlencoded, то вам эту форму сначала создать нужно, а не просто слать сплошным.