Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

228
Vistas
Parámetros de publicación de Axios no leídos por $_POST

Así que tengo este código:

 axios({ method: 'post', url, headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, data: { json, type, } })

Originalmente tenía el axios.post normal, pero lo cambié porque pensé que podría haber sido un problema de encabezado. Sin embargo, sigo sin detectar nada en mi $_REQUEST ni en $_POST . Sin embargo, está recibiendo datos en file_get_contents("php://input") .

¿Alguna idea de lo que está mal?

Editar

Está bien, creo que sé lo que está mal. Lo está publicando como un objeto json, por lo que solo se puede leer en el archivo php://input. ¿Cómo lo cambio a una cadena normal en axios?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

De la documentación (no he conservado enlaces en el material citado):

Usando el formato application/x-www-form-urlencoded

De forma predeterminada, axios serializa objetos de JavaScript en JSON.

PHP no admite JSON como formato de datos para $_POST .

Solo admite los formatos procesables por máquina compatibles de forma nativa con los formularios HTML :

  • application/x-www-form-urlencoded
  • multiparte/datos de formulario

Para enviar datos en el formato application/x-www-form-urlencoded, puede usar una de las siguientes opciones.

Navegador

En un navegador, puede usar la API URLSearchParams de la siguiente manera:

 var params = new URLSearchParams(); params.append('param1', 'value1'); params.append('param2', 'value2'); axios.post('/foo', params);

Tenga en cuenta que URLSearchParams no es compatible con todos los navegadores, pero hay un polyfill disponible (asegúrese de polyfill en el entorno global).

Alternativamente, puede codificar datos usando la biblioteca qs:

 var qs = require('qs'); axios.post('/foo', qs.stringify({ 'bar': 123 }));

O puede personalizar su PHP para que pueda manejar JSON según esta respuesta en otra pregunta.

over 4 years ago · Santiago Trujillo Denunciar

0

var params = { data1: 'string', } axios.post(url, params).then(function(response) { //code here });

o

 axios.post(url, {data1: 'string' }).then(function(response) { //code here });

API

 $_POST = json_decode(file_get_contents("php://input"),true); echo $_POST['data1'];
over 4 years ago · Santiago Trujillo Denunciar

0

Para hacer las cosas más fáciles y universales si alguna vez decide cambiar entre bibliotecas AJAX o idiomas de servidor. Con axios use el JS FormData nativo.
Si tiene sus datos en un objeto, puede convertirlos a FormData de esta manera:

 var myDataObj = {id:1, name:"blah blah"} var formData = new FormData(); for (var key in myDataObj) { formData.append(key, myDataObj[key]) }

Luego envías los datos:

 axios.post('/sub/process.php', formData, { params: { action: "update-user" }, headers: { 'Content-Type': 'multipart/form-data' }, baseURL: 'http://localhost', }).then(data => console.log(data) ).catch(err => { console.log(err) return null })

Tenga en cuenta que también puede enviar información usando params en axios que puede recuperar usando $_GET . También tenga en cuenta que estoy usando la baseURL en caso de que tenga diferentes servidores para la página web y su punto final de API.
También debe comprender que antes de que axios envíe la solicitud real, realiza una solicitud de preflight previa. Una solicitud de verificación previa es un mecanismo en CORS por parte del navegador para verificar si el destino del recurso está dispuesto a aceptar la solicitud real o no. Después de todo, ¿por qué se enviaría una solicitud cuando el host de destino no está dispuesto a recibirla de todos modos?

Debe asegurarse de que su servidor tenga los encabezados correctos para su solicitud de axios; de lo contrario, la solicitud de verificación previa detectará la incompatibilidad y detendrá su solicitud:

 //this is if you are using different different origins/servers in your localhost, * to be update with the right address when it comes to production header('Access-Control-Allow-Origin: *'); //this is if you are specifying content-type in your axios request header("Access-Control-Allow-Headers: Content-Type");

Ahora, podrá acceder a sus datos enviados en la variable $_POST :

 echo "<pre>"; print_r($_POST); echo "</pre>";

Además, axios le permite enviar datos en diferentes formatos. puedes enviar un json por ejemplo como este:

 axios.post('/sub/process.php', { id: "1", name:"blablah" }, { params: { action: "update-item" }, headers: { 'Content-Type': 'application/json' }, baseURL: 'http://localhost', }).then(data => console.log(data) ).catch(err => { console.log(err) return null })

En el lado de PHP, se puede acceder a esto de la siguiente manera:

 $data = json_decode(file_get_contents("php://input"),true); echo "<pre>"; print_r($data); echo "</pre>";
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda