Estoy tratando de mostrar los parámetros de una búsqueda. Desde buscar, llamo a un script php que pasa los parámetros que quiero mostrar.
El código JavaScript:
const fichero = "/proves/php/accion_formulario.php"; let tp_curso = document.getElementById("actualizar_nombre").value; let vr_curso = document.getElementById("version_lenguaje").value; let pr_curso = document.getElementById("programa_curso").value; let fp_curso = document.getElementById("ficheros_curso").value; let vp_curso = document.getElementById("videos_curso").value; let respuesta = fetch(fichero, { method: "POST", headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: 'nom=tp_curso&versio=vr_curso&programa=pr_curso&fitxers=fp_curso& &fitxers=fp_curso&videos=vp_curso&ncurs=curso_actualizar', headers: {"Content-type": "application/text; charset=UTF-8"} }) .then(respuesta => respuesta.text()) .then(respuesta => { alert(respuesta); }) .catch(error => alert("Se ha producido un error: " + error));El código php:
$this -> n_curso = $_POST["nom"]; $this -> titulo_curso = $_POST["versio"]; $this -> version_curso = $_POST["programa"]; $this -> programa_curso = $_POST["fitxers"]; $this -> dir_ficheros_curso = $_POST["videos"]; $this -> dir_videos_curso = $_POST["ncurs"]; $this -> params[0] = $this -> n_curso; $this -> params[1] = $this -> titulo_curso; $this -> params[2] = $this -> version_curso; $this -> params[3] = $this -> programa_curso; $this -> params[4] = $this -> dir_ficheros_curso; $this -> params[5] = $this -> dir_videos_curso; print_r($this -> params);Lo que expongo es una matriz vacía:
Array ( [0] => [1] => [2] => [3] => [4] => [5] => )Leí esta publicación pero no pude solucionar el problema.
¿Qué estoy haciendo mal?
Gracias
Su objeto literal de parámetros contiene los headers clave dos veces, lo que toma el último valor (que desafortunadamente ya no es un error de sintaxis ). Estás enviando application/text; charset=UTF-8 en lugar de application/x-www-form-urlencoded para Content-Type , por lo que PHP no analizará los parámetros como espera.
Para solucionarlo, utilice
fetch(fichero, { method: "POST", headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: '…', }) .then(respuesta => respuesta.text()) .then(respuesta => { alert(respuesta); }) .catch(error => alert("Se ha producido un error: " + error)); También tenga en cuenta que su body es actualmente una cadena codificada, sin tener en cuenta las variables. Para hacer esto necesitarías
use una cadena de plantilla (o concatenación de cadenas) con escapar de los valores usted mismo:
body: `nom=${encodeURIComponent(tp_curso)}&versio=${encodeURIComponent(vr_curso)}&…`, use un objeto URLSearchParams :
body: new URLSearchParams({nom: tp_curso, versio: vr_curso, …}), usar un objeto FormData . Este es el más fácil si tiene un <form> para todos los elementos de entrada y cada <input> tiene el atributo de name adecuado (tal como lo usaría al enviar el formulario de forma nativa, sin XHR/ fetch ):
body: new FormData(document.getElementById('accion_form')),