Foros del Web » Programando para Internet » Javascript »

Ayuda a los gurus de javascript

Estas en el tema de Ayuda a los gurus de javascript en el foro de Javascript en Foros del Web. Bueno tenia la necesidad de enviar datos por método POST sin tener que usar un formulario, y buscando en Internet encontré un script que lo ...
  #1 (permalink)  
Antiguo 06/03/2009, 12:52
V-P
 
Fecha de Ingreso: noviembre-2008
Mensajes: 21
Antigüedad: 15 años, 5 meses
Puntos: 0
Ayuda a los gurus de javascript

Bueno tenia la necesidad de enviar datos por método POST sin tener que usar un formulario, y buscando en Internet encontré un script que lo hacia y me sirvió de mucho pero ahora tengo la necesidad de enviar los datos pulsando un botón y no mediante un enlace como lo hace actualmente

Aquí esta el código

Código HTML:
<html> 
<head> 
<title>Enviando información por post</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
</head> 
 
<body> 
<script type="text/javascript" language="javascript"> 
	
	var form = document.createElement("form"); // crear un form
	with(form) {
		setAttribute("name", "myform"); //nombre del form
		setAttribute("action", ""); // action por defecto
		setAttribute("method", "post"); // method POST
	}
	
	
	var input = document.createElement("input"); // Crea un elemento input
	with(input) {
		setAttribute("name", "theInput"); //nombre del input
		setAttribute("type", "hidden"); // tipo hidden
		setAttribute("value", ""); // valor por defecto
	}
	form.appendChild(input); // añade el input al formulario
	
 
	document.getElementsByTagName("body")[0].appendChild(form); // añade el formulario al documento
	
window.onload=function(){
var my_links = document.getElementsByTagName("a");
for (var a = 0; a < my_links.length; a++) {
if (my_links[a].name=="post") my_links[a].onclick = function() {
	document.myform.action=this.href;
	document.myform.theInput.value=this.title;
	document.myform.submit();
	return false;}
}
 
}
 
</script> 
<h3>Enviando información por post</h3> 
<a href="ejemplo_post.php"  name="post" title="Este valor se enviará por post" >Pulsa aquí </a> para hacer POST<br> 
También puedes <a href="ejemplo_post.php"  name="post" title="Este valor también se envía por post" >pulsar aquí</a> para hacer otro POST<br> 
Esto es un<a href="ejemplo_post.php" > link normal</a> 
</body> 
 
</html> 
hago cambios para que me envíe pulsando un botón pero no me funciona que es lo que debo cambiar para hacerlo.

Se que en esta linea

Código:
document.getElementsByTagName("a");
toma como objeto el dato del enlace
  #2 (permalink)  
Antiguo 06/03/2009, 13:41
Avatar de jeybi  
Fecha de Ingreso: julio-2008
Ubicación: Mexico
Mensajes: 130
Antigüedad: 15 años, 9 meses
Puntos: 10
Respuesta: Ayuda a los gurus de javascript

Puedes usar esto:

Código javascript:
Ver original
  1. document.getElementById('postbotton').onclick = function(){
  2.     document.myform.action=this.className;
  3.     document.myform.theInput.value=this.title;
  4.     document.myform.submit();
  5.     return false;
  6. }

En el atributo class del boton va el action del form:

Código html:
Ver original
  1. <input type="button" value="Enivar Form" title="Este valor se enviará por post" id='postbotton' class="ejemplo_post.php"/ >

Aunque yo te recomendaria usar CSS en el enlace para que paresca un boton, asi si el usuario tiene javascript desabilitado aun te lleva a 'ejemplo_post.php', solo que sin enviar nada.Ya tu con tu script muestras algun contenido alterno deacuerdo a si hay o no parametros.
  #3 (permalink)  
Antiguo 06/03/2009, 13:52
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Ayuda a los gurus de javascript

No entiendo por que quieres hacer eso, tu script al final de cuentas te crea un formulario. Por que no usar entonces un formulario desde el principio y asegurar máxima compatibilidad y accesibilidad?
__________________
twitter: @imbuzu
  #4 (permalink)  
Antiguo 06/03/2009, 15:18
V-P
 
Fecha de Ingreso: noviembre-2008
Mensajes: 21
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Ayuda a los gurus de javascript

Cita:
Iniciado por buzu Ver Mensaje
No entiendo por que quieres hacer eso, tu script al final de cuentas te crea un formulario. Por que no usar entonces un formulario desde el principio y asegurar máxima compatibilidad y accesibilidad?
Si entiendo a lo que te refieres, y se que no es algo lógico hacer esto si tranquilamente se lo hace desde un formulario, y yo se eso pero el problema es que estoy haciendo un trabajo en el cual usaron Joomla! 1.5 para desarrollar la página y tengo un formulario creado en el breezingforms el cual tengo que enlazar con un formulario externo de pago por Internet, busque en todo lugar y no encontré la forma de hacerlo desde el breezingforms, así que mi única opción es introducir un código en javascript el cual obligue al breezingforms a enviar los datos por método POST al formulario externo ahora si alguien sabe la forma de hacerlo le estaría muy agradecido que me diga como lo hago.

Volviendo al tema

Gracias jeybi, yo revisando el código también encontré la forma de hacerlo pero creo que lo que me diste tu es mucho mejor, ahora me tope con otro problema que en este si estoy atado de manos, ¿Como hago para que el script me funcione en Internet Explorer 7 o superior?

Revise en todos los demas exploradores y todos trabajaron normalmente y enviaron los datos, pero el IE no lo hace y me muestra este error

Código:
'document.myform' es nulo o no es un objeto
El Código final que obtuve es este

Código HTML:
<script type="text/javascript" language="javascript"> 
	var form = document.createElement("form"); // crear un form
	with(form) {
		setAttribute("name", "myform"); //nombre del form
		setAttribute("action", ""); // action por defecto
		setAttribute("method", "post"); // method POST
	}
	var input = document.createElement("input"); // Crea un elemento input
	with(input) {
		setAttribute("name", "theInput"); //nombre del input
		setAttribute("type", "hidden"); // tipo hidden
		setAttribute("value", ""); // valor por defecto
	}
	form.appendChild(input); // añade el input al formulario
	
	document.getElementsByTagName("body")[0].appendChild(form); // añade el formulario al documento
	
window.onload=function(){
document.getElementById('postbotton').onclick = function(){
	document.myform.action="resultado.php";
	document.myform.theInput.value=document.getElementById('valor').value
	document.myform.submit();
	return false;}
}
</script> 
<h3>Enviando información por post</h3> 
<p>
  <input name="valor" type="text" id="valor">
</p>
<p>
  <input type="button" name="post" id="postbotton" value="Bot&oacute;n">
</p> 
Ayuda con esto mas plz.

Última edición por V-P; 06/03/2009 a las 15:28
  #5 (permalink)  
Antiguo 06/03/2009, 16:06
Avatar de jeybi  
Fecha de Ingreso: julio-2008
Ubicación: Mexico
Mensajes: 130
Antigüedad: 15 años, 9 meses
Puntos: 10
Respuesta: Ayuda a los gurus de javascript

Ni idea, prueba con document.forms['myform'].XXXX <- las diferentes propiedades que usas
  #6 (permalink)  
Antiguo 06/03/2009, 16:21
V-P
 
Fecha de Ingreso: noviembre-2008
Mensajes: 21
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Ayuda a los gurus de javascript

Ya probé y no me ejecuta

ahora me dice que

document.forms.myform es nulo

yo supongo que es porque se crea ahí, asumo que de alguna forma se debería declarar al formulario ya sea como una variable o alguna otra cosa pero no se como, de todos modos gracias por tu ayuda jeybi
  #7 (permalink)  
Antiguo 06/03/2009, 16:55
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Ayuda a los gurus de javascript

agrega:

setAttribute("id", "myForm");

a tu with(form)

y en lugar de
document.myform
usa
document.getElementById('myForm')
en las últimas lineas.
__________________
twitter: @imbuzu
  #8 (permalink)  
Antiguo 07/03/2009, 08:32
V-P
 
Fecha de Ingreso: noviembre-2008
Mensajes: 21
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Ayuda a los gurus de javascript

Cita:
Iniciado por buzu Ver Mensaje
agrega:

setAttribute("id", "myForm");

a tu with(form)

y en lugar de
document.myform
usa
document.getElementById('myForm')
en las últimas lineas.
Muchas gracias buzu, ahí estaba el problema, aunque también tuve que aumentar la linea

Código:
setAttribute("id", "theInput");
De nuevo muchas gracias.
  #9 (permalink)  
Antiguo 07/03/2009, 13:39
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Ayuda a los gurus de javascript

Que bueno que este solucionado, suerte.
__________________
twitter: @imbuzu
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:01.