Creé una aplicación React desde la cual estoy llamando a mi servidor construido en PHP.
Así es como llamo a mi archivo PHP:
const requestOptions = { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: JSON.stringify({ name, username, password }), }; console.log(requestOptions); fetch('http://localhost/crud/requests/signup.php', requestOptions) .then(res => res.json()) .then(data => console.log(data));Esto es lo que tengo en el archivo PHP:
if (isset($_POST) && !empty($_POST)) { // do something } Cuando imprimo la variable $_POST , obtengo una matriz vacía. Incluso $_RESPONSE está vacío.
Pero cuando traté de imprimir el flujo de entrada de esta manera:
print_r(file_get_contents('php://input'));Todo parece estar bien, ¿Alguien puede explicar por qué sucede esto? Traté de leerlo en la documentación y busqué en algunos foros y blogs, pero no quedé satisfecho con las respuestas.
El soporte de formulario incorporado de PHP solo puede analizar formularios de application/x-www-form-urlencoded y formularios de varias multipart/form-data formulario. Lo que en realidad está enviando es un objeto serializado en JSON, con el tipo MIME incorrecto de application/x-www-form-urlencoded .
Para enviar un application/x-www-form-urlencoded , use URLSearchParams en lugar de JSON.stringify :
fetch('http://localhost/crud/requests/signup.php', { method: 'POST', body: new URLSearchParams({ name, username, password }), }) .then(res => res.json()) .then(data => console.log(data)); En este caso, no es necesario establecer explícitamente Content-Type : el navegador lo hará automáticamente . Para enviar una carga útil multipart/form-data (que es posible que deba hacer si desea cargar archivos más grandes), use un objetoFormData en su lugar.
Si desea enviar JSON después de todo, debe enviarlo con el tipo MIME correcto en el encabezado, application/json . En el lado de PHP, se resignará a analizar la carga útil manualmente usando json_decode .