Necesito enviar un formulario y una matriz/cadena al servidor.
Mi Ajax se ve así:
var formData = $("#formpv").serialize(); $.ajax({ type: 'POST', url: 'scripts/formIntoDB.php', data: formData,De esta manera, puedo recuperar los datos del formulario en PHP de esta manera:
$_POST['name']; //Output "Foobar"Pero cuando envío los datos de formulario serializados y otro parámetro como este:
var formData = $("#formpv").serialize(); var posData = "TEST"; $.ajax({ type: 'POST', url: 'scripts/formIntoDB.php', data: {form: formData, pos: posData},Y trata de obtener el nombre ahora en PHP:
$_POST['form']['name'];Esto solo arroja un error de PHP Parse: error de sintaxis, '[' inesperado
¿Cuál es la diferencia cuando envío datos como estos datos: {form: formData, pos: posData} y data: formData ?
El problema se debe a que la cadena en formData se vuelve doble, es decir. una cadena de pares clave/valor dentro de una cadena de pares clave/valor. Como solo se deserializa el nivel superior de esto, su código PHP no puede leer el segundo nivel de la manera que pretende.
Para solucionar esto, debe crear manualmente el objeto completo, por ejemplo:
$.ajax({ type: 'POST', url: 'scripts/formIntoDB.php', data: { form: { name: $('#yourNameInput').val(), // all your other inputs here... }, pos: posData } }); O, en cambio, podría mantener los datos de la solicitud planos y simplemente agregar pos usando una entrada oculta dentro del formulario.