Formulario AJAX simple y rápido.

  • Autor Autor zcriptz
  • Fecha de inicio Fecha de inicio
zcriptz

zcriptz

1
Ómicron
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
Suscripción a IA
PHP:
<?php
	if($_POST){ ?>
		<b>Campo 1:</b> <?=$_POST['campo1']?><br>
		<b>Campo 2:</b> <?=$_POST['campo2']?>
	<? exit;
	}
?>
<script>
	function AJAX(u, c, d){
		var XMLReq = new XMLHttpRequest();
		XMLReq.onreadystatechange = function(){
			if(XMLReq.readyState==4) c(XMLReq.responseText);
		};
		if(d) XMLReq.open('POST', u), XMLReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		else XMLReq.open('GET', u);
		XMLReq.send(d)
	}

	function sendForm(f, c){
		inputElements = f.querySelectorAll('input,textarea,select,button');
		for(i = 0, postVar = ''; i < inputElements.length; postVar += inputElements[i].name+'='+inputElements[i].value+'&', i++);
		AJAX(f.action, c, postVar);
		return false
	}


	function byId(i){
		return document.getElementById(i)
	}

</script>
<form method="post" onsubmit="return sendForm(this, function(h){ byId('status').innerHTML = h })">
	<b>Campo 1:</b><input type="text" name="campo1"><br>
	<b>Campo 2:</b><textarea name="campo2" style="width:300px;height:100px"></textarea>
	<input type="submit" value="Enviar">
</form>
<div id="status"></div>

Pueden definir a donde va a enviar AJAX colocandole "action" al FORM.

No hay mucho que explicar, ya es para usuarios más "avanzados".

Hay que ponerle al formulario
HTML:
onsubmit="return sendForm(this, CALLBACK)"
para que lo mande por AJAX.

(CALLBACK, es en este caso es a donde "escribirá" la respuesta recibida, en el caso del demo, en el DIV con la ID "status")



Modificado: me faltaba un parámetro en la función ajax.
 
Última edición:
Gracias por el aporte. Limpio, eficaz y fácil de entender. Saludos!
 
Muy bueno el script como base pero cuidado con estas cosas.

A este tipo de peticiones hay que aplicarles seguridad, imagino que en un caso de uso real no vas a hacer algo tan simple como pintar los campos que vienen por post en la pantalla, pero de ser así ten en cuenta que cualquier persona podría construir una petición post similar en su propio formulario, luego inyectar en los valores del campo un script en js que por ejemplo, lea las cookies de sesión (para robar la sesión obviamente) y las envie mediante ajax a otro servidor.

Luego este formulario ponerlo en una página y pasarsela a un usuario víctima de forma que el formulario se lance automáticamente al abrirla, redirigiendole a la página que muestra los valores recibidos por post en pantalla y ejecutandose el script que le roba las cookies.
 
Muy bueno el script como base pero cuidado con estas cosas.

A este tipo de peticiones hay que aplicarles seguridad, imagino que en un caso de uso real no vas a hacer algo tan simple como pintar los campos que vienen por post en la pantalla, pero de ser así ten en cuenta que cualquier persona podría construir una petición post similar en su propio formulario, luego inyectar en los valores del campo un script en js que por ejemplo, lea las cookies de sesión (para robar la sesión obviamente) y las envie mediante ajax a otro servidor.

Luego este formulario ponerlo en una página y pasarsela a un usuario víctima de forma que el formulario se lance automáticamente al abrirla, redirigiendole a la página que muestra los valores recibidos por post en pantalla y ejecutandose el script que le roba las cookies.

Es solo un ejemplo, está htmlentities y tokens... entre varias cosas simples que se pueden hacer para evitar eso.

- - - Actualizado - - -

La "seguridad" debería estar del lado del servidor, y no en esta función. Por eso creo que no va mucho al caso.
 
Excelente aporte amigo!
 
gracias por ese aporte amigo.
 
Gracias por el aporte sencillo y fácil de entender.
 
Gracias por el aporte!!
 
Atrás
Arriba