Hay algo en lo que parece que no puedo encontrar documentación:
Tengo este formulario con varios botones. Los botones tienen sus propias acciones asociadas y el botón Enviar está destinado a enviar datos para su almacenamiento. Todas las acciones se manejan en PHP en el lado del servidor.
La razón principal para enviar el formulario con XMLHttpRequest
es para evitar que la página se vuelva a cargar para el cliente.
<form action="/path/to/action.php" method="post" onsubmit="return submitForm(event)"> <input type="text" name="comment"> <button name="action" value="new_action">Action</button> <!-- more fields & buttons ... --> <input type="submit" name="submit" value="submitted"> </form>
La función submitForm()
es así:
function submitForm(event) { event.preventDefault(); var data = new FormData(event.target); console.log([...data]); var request = new XMLHttpRequest(); request.open("POST", event.target.getAttribute("action"), true); request.send(data); request.onreadystatechange = function() { if (request.readyState === 4 && request.status === 200) { document.open(); document.write(request.responseText); document.close(); } } return false; }
Todo funciona como se esperaba excepto un detalle. Debido a preventDefault()
o al return false
en onsubmit
, los valores de envío/botón no se muestran en la matriz $_POST
en el lado del servidor.
Necesito estos valores para que cuando se haga clic en los botones, se activen ciertas acciones, pero solo si se hizo clic en los botones asociados y están en $_POST
.
Hasta ahora no he podido encontrar cómo y por qué esto funciona como lo hace. ¿Alguien tiene información de fondo sobre esto o una solución?
Obviamente, podría agregar una función onclick
a los botones que agrega manualmente su valor a los datos enviados si se hace clic, pero me parece que no debería ser necesario.