enviar una solicitud http sin XHR en un controlador de eventos
-
06-07-2019 - |
Pregunta
¿Cómo enviar una solicitud http con cualquiera de los métodos de publicación / obtención usando javascript como administrador de eventos? ¡Gracias! Paul
Solución
Está bien, no quieres usar Ajax. ¡Puedes usar un controlador de eventos para enviar un formulario!
<a href='#' onclick='cow_submit("zoodle")'>send</a>
<form method='post' id='formie' action='find_some_action.php'>
<input type='hidden' id='snoutvar' name='snoutvar' value='snout'>
</form>
<script>
function cow_submit(a_var_to_set){
var plip=document.getElementById('formie');
var snout=document.getElementById('snoutvar');
snout.value=a_var_to_set;
plip.submit();
}
Otros consejos
use XmlHttpRequest
código de muestra:
var client = new XMLHttpRequest();
client.onreadystatechange = handler;
client.open("GET", "test.xml");
client.send();
function handler()
{
// your handler
}
Puede usar XMLHttpRequest para enviar solicitudes desde javascript
Enviando solicitud GET
var url = "get_data.php";
var params = "lorem=ipsum&name=binny";
http.open("GET", url+"?"+params, true);
http.onreadystatechange = function() {//Call a function when the state changes.
if(http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
}
http.send(null);
Enviando solicitud POST
var url = "get_data.php";
var params = "lorem=ipsum&name=binny";
http.open("POST", url, true);
//Send the proper header information along with the request
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
http.onreadystatechange = function() {//Call a function when the state changes.
if(http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
}
http.send(params);
Y no se olvide de codificar los parámetros usando encodeURIComponent
para la codificación del valor param en caso de que el usuario ingrese
por ejemplo
params="paramName="+encodeURIComponent(paramValue);
La clase estándar para hacer esto es XmlHttpRequest
, pero no es universalmente compatible. En algunos navegadores tienes que usar ActiveXObject (" Microsoft.XMLHTTP ")
.
Busque en el sistema jQuery que proporciona métodos de descarga HTTP (estilo AJAX) independientemente de las API del navegador subyacente (por lo tanto, evitando mucho del código que se muestra en la respuesta de Tzury).
La documentación de jQuery AJAX se encuentra en http://docs.jquery.com/Ajax
Debes intentar agregar una cadena en un campo oculto y luego llamar a form.submit () para enviar tu formulario a la página definida en acción.
<script type="text/javascript">
function doTestFormSubmit(yourString) {
document.getElementById("myString").value=myString;
document.getElementById("testForm").submit();
}
</script>
<form name="testForm" id="testForm" action="yourDesiredPage.php" method="post">
<input type="hidden" name="myString" id="myString" value=""/>
</form>
Tutorial Ajax ( http://code.google.com/ edu / ajax / tutorials / ajax-tutorial.html )
var obj;
function ProcessXML(url) {
// native object
if (window.XMLHttpRequest) {
// obtain new object
obj = new XMLHttpRequest();
// set the callback function
obj.onreadystatechange = processChange;
// we will do a GET with the url; "true" for asynch
obj.open("GET", url, true);
// null for GET with native object
obj.send(null);
// IE/Windows ActiveX object
} else if (window.ActiveXObject) {
obj = new ActiveXObject("Microsoft.XMLHTTP");
if (obj) {
obj.onreadystatechange = processChange;
obj.open("GET", url, true);
// don't send null for ActiveX
obj.send();
}
} else {
alert("Your browser does not support AJAX");
}
}
function processChange() {
// 4 means the response has been returned and ready to be processed
if (obj.readyState == 4) {
// 200 means "OK"
if (obj.status == 200) {
// process whatever has been sent back here:
// anything else means a problem
} else {
alert("There was a problem in the returned data:\n");
}
}
}