Foros del Web » Programando para Internet » Javascript »

Esto es frustrante!!

Estas en el tema de Esto es frustrante!! en el foro de Javascript en Foros del Web. Hola... ..Pues no me funciona el docuemtn.form.submit(); No hay errores en javascript he verifiacado linea por linea, firebug de mozilla y ningun otro verificador me ...
  #1 (permalink)  
Antiguo 04/06/2008, 11:20
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Exclamación Esto es frustrante!!

Hola...
..Pues no me funciona el docuemtn.form.submit();

No hay errores en javascript he verifiacado linea por linea, firebug de mozilla y ningun otro verificador me arroja error, es mas coloco antes y despues del envio un alert... ambos salen lo q supone q el codigo corre pero nada de nada...

Para q tengan una idea, es un formulario de registro, que verifica los campos con ajax (nombre de usuario, correo, dni, ruc) luego los demas campos sin ajax ejemplo apellido, direccion telefono, etc...

si no hay error en los valores introducidos por el usuario, se envia el formulario.. si no.. no se envia nada (obvio!!)

la pagina se recarga, como cuando se hace un envio pero no se envia nada.

gracias!!
  #2 (permalink)  
Antiguo 04/06/2008, 11:26
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Esto es frustrante!!

Sugerencias varias: document.nombreformulario.submit() tiene que funcionar (imagino que escribiste mal document sólo en el mensaje). Procurá no usar form como nombre del formulario si es que lo hiciste. Colocá el código html de tu formulario. Utilizá títulos que después le sirvan a otros usuarios con problemas semejantes cuando usen el buscador.
  #3 (permalink)  
Antiguo 04/06/2008, 11:37
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Esto es frustrante!!

Hola:

Para cosas importantes no deberías depender de javascript, así que es mejor que uses un botón del tipo submit... y sobre la forma de validar hay muchísimos mensajes en estos foros (es trivial), y validar también en el servidor... pero con un botón submit y la validación en el tag form (onsubmit="return validar(this)") es correcto, accesible y usable.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 04/06/2008, 11:43
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Respuesta: Esto es frustrante!!

Te coloco el codigo para q veas como hay un caso.

Código:
function nombre( Ctrl,...otros parametros...){
....
  if (existe.readyState==4){
     switch (Ctrl){
      case 'User_nom_usu'://verifico otro ajax
       VrfMail();break;
     case 'user_mail'://enviar
     //////////////////////
     alert('se enviara '+Ctrl);
     document.registro.submit();
     alert('enviado '+Ctrl);
     return;
     //////////////////////
     break;
     }
   }
}
esto no me funciona y no se por que.

Gracias
  #5 (permalink)  
Antiguo 04/06/2008, 12:01
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Esto es frustrante!!

Más allá de lo que dice caricatos (), con lo que coincido, está mal encarado el tema. Si usás ajax en modo asíncrono (lo que deduzco de readyState==4, ya que en modo síncrono no hay onreadystatechange ni readyState), cómo te estás asegurando que la respuesta a la función VrfMail() se produce antes de la instrucción para enviar el formulario?
En todo caso, la instrucción de envío del formulario debería estar dentro de VrfMail() o de otra función, o deberías usar ajax en modo síncrono.
  #6 (permalink)  
Antiguo 04/06/2008, 12:19
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Respuesta: Esto es frustrante!!

pues me explico mejor con esto:

tengo una funcion q llamo YaExiste():

Código:
function YaExiste(Ctrl,Dir,From,Msj){ alert('ya '+errores);
	document.getElementById(Ctrl).disabled=true;
	var divcontenido=document.getElementById("M"+Ctrl);							
	var mjscargando="<img src='"+Dir+"images/loading0.gif' />";
	divcontenido.innerHTML=mjscargando;
	var existe=nuevoAjax();
	var get='Select='+Ctrl+'&From='+From+'&Where='+Ctrl+'="'+document.getElementById(Ctrl).value+'"';
	existe.open("GET",Dir+'auxiliares/yaexiste.php?'+get,true);
 existe.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	existe.send(null);
	existe.onreadystatechange=function(){
		if (existe.readyState==4){
			if (existe.responseText != 'N'){ bien(Ctrl,'../../');}
			else{error(Ctrl,Msj);}
			if (todo==false){document.getElementById(Ctrl).disabled=false; return;}
			switch (Ctrl){
			case 'col_cod_mod'://alert('pasa a ruc');
			 VrfRucOpcional('col_ruc');break;
			case 'col_ruc'://alert('pasa a contiua')
			 continuacole();break;
			case 'User_nom_usu'://alert('pasar a mail');
			 VrfMail();break;
			case 'user_mail'://alert('pasar a dni')
			 VrfDni();break;
			case 'user_dni'://alert('pasar a ruc')
			 VrfRuc();break;
			case 'user_ruc'://alert('pasa a contiua')
			 codigo();break;
			}
		}
	}
}
la uso asi:

Cita:
function VrfUnomusu(){
if( vacio('User_nom_usu') && minimo('User_nom_usu',4))
YaExiste('User_nom_usu','','user','No Disponible');
else if (todo==true) VrfMail();
}//VrfUnomusu
//si no es vacio(mensaje de obligatorio) y tiene minimo 4 caracteres verifica con ajax
//sino verificara el mail
function VrfMail(){
if( hayvalor('user_mail') && minimo('user_mail',8) && mail("user_mail"))
YaExiste('user_mail','','user','Correo ya registrado');
else if (todo==true) VrfDni();
}//VrfMail
//si tiene algun valor (opcional) y minomo 8 caracteres y cumple con expresion regular de mail verifica con ajax
//sino verificar Dni... etc etc...

RESUMIENDO:

Es una funcion general que llamo cuando quiero saber si un dato intriducido esa disponible o no....
Por otra parte lo que hago es una recursividad de la funcion que me premite usarla para validar 4 campos y cuando termino de validar el ultimo campo que necesito llama a otra funcion que validara los campos no necesarios de ajax, como ya mencione...

despues que valida los campos con ajax y sin ajax se envia el formulario (si no detecta error).
  #7 (permalink)  
Antiguo 04/06/2008, 12:44
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Esto es frustrante!!

Si hiciste todas esas verificaciones, sólo queda revisar si el formulario está armado correctamente (definida propiedad nombre con valor entre comillas dobles, definido el action, definido el method) o si estás recibiendo correctamente los datos en la página de proceso. En php podrías usar print_r($_POST) para ver todo lo recibido vía post, o print_r($_GET) para ver lo recibido por get o print_r($_FILES) si usás campos files y enctype multipart.
  #8 (permalink)  
Antiguo 04/06/2008, 13:26
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Respuesta: Esto es frustrante!!

comillas dobles necesariamente?

hay algun error que se produce si uso comilla simples??

gracias
  #9 (permalink)  
Antiguo 04/06/2008, 13:36
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Esto es frustrante!!

No es lo correcto usar comillas simples, sin embargo no afecta (no ponerlas sí trae problemas).
  #10 (permalink)  
Antiguo 04/06/2008, 13:46
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Respuesta: Esto es frustrante!!

Pues mira estimado Panino5001.... he pasado mas de 3 horas revisando cada linea de codigo... cada instruccion con prueba de escritorio incluida y no hay error alguno...
Voy a usar las comillas dobles para todo el script q uso...
Pero de no ser asi... se podra decir q hay una debilidad en cuanto a ajax o javascript?

gracias.

Última edición por killerangel; 04/06/2008 a las 13:57
  #11 (permalink)  
Antiguo 04/06/2008, 14:27
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Esto es frustrante!!

No sé qué decirte, mi impresión es que debe haber un problema con la creación del formulario. Pero una forma de saber qué pasa podría ser eliminar el submit automático (durante el debug), y hacerlo a mano con un botón submit no bien hayan terminados todos los procesos ajax. Si entonces la página de proceso sí recibe los valores, es problema de javascript. Si no recibe los valores, es problema del formulario.
  #12 (permalink)  
Antiguo 04/06/2008, 19:27
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Respuesta: Esto es frustrante!!

Bueno la verdad es q al final tube q cambiar todo mi script.... no he podido corregir el problema, incluso consulte con uno de mis profesores y me comento q habia tenido un problema similar....
De hecho no se si sera problema de javascript o de ajax pero si hay inconveniente y la verdad me ha dejado un sabor amargo.....

De todas maneras te lo agradezco y con un nuevo codigo... aunque mas grande y redundante pude con esto.....

Lo que espero es tener el mismo problema otra vez y que sea mio.... no soportaria q el famoso js tenga errores..... eso si q no seria bueno....

gracias!!!
  #13 (permalink)  
Antiguo 04/06/2008, 21:49
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Respuesta: Esto es frustrante!!

Si hay alguien q use ajax y obiamente js... porfavor diganme como hacer para enviar un formulario despues de recibir valor de ajax:

if (existe.readyState==4){
if(existe.status==200){
document.formulario.submit();
}
}

porfavor q me lo haga saber ... q esto a mi no me funciona!!
  #14 (permalink)  
Antiguo 04/06/2008, 21:57
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Esto es frustrante!!

Otra cosa que suele traer problemas es no cerrar los hilos después de usarlos. Esta es otra de las cosas que deberías verificar. Lo que quiero decir es lo siguiente:

Código PHP:
//...
if(xmlhttp.readyState==4){
//todo lo que quieras y luego cerrás el hilo así:
xmlhttp.onreadystatechange = function () {}
xmlhttp.abort();

  #15 (permalink)  
Antiguo 06/06/2008, 21:57
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Respuesta: Esto es frustrante!!

gracias por el dato Panino5001 ... pero tengo ahora una duda....

Si el script, con ajax claro, me funciona una sola vez en ie y luego se queda como si nunca recibiera respuesta de la web de consulta, y a la vez este problema no se me presenta en ff...

Cuál seria la causa de esto? por ahi GatorV me dijo q serian las cookies y me indico pasar un random a la funcion pero esto me dejo muy confundido y no se que puedo hacer con respecto a este tema.

gracias
  #16 (permalink)  
Antiguo 06/06/2008, 22:22
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Esto es frustrante!!

Puede ser un problema de caché, pero me inclino a pensar que el problema es de los cierres que te mencioné (no sé si lo habrás probado). De todas maneras, lo que te indican del random (que es muy aconsejable) es lo siguiente: cuando iniciás la petición con algo como esto:
Código PHP:
ajax.open('get','pag.php?'+param+'='+escape(valor),true); 
Lo que te indican y repito que sí es aconsejable, es agregar un valor randómico a la url para evitar la caché. Algo así:
Código PHP:
ajax.open('get','pag.php?'+param+'='+escape(valor)+'&'+Math.random(),true); 
  #17 (permalink)  
Antiguo 07/06/2008, 18:23
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Respuesta: Esto es frustrante!!

Pues la verdad me ha funcionado a la perfeccion.....

Gracias Panino5001.... y porsupuesto tb a GatorV...

Por algo este es el mejor foro de la web!!
  #18 (permalink)  
Antiguo 07/06/2008, 19:07
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Esto es frustrante!!

Me alegra que lo hayas solucionado
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 03:00.