Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/08/2010, 15:32
Avatar de CHuLoSoY
CHuLoSoY
 
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 10 meses
Puntos: 29
Exclamación No hace split en parámetros

Hola amigos.

No logro dar con la solución. El caso es que uso ajax para enviar datos por POST y esos datos los leo de los campos de texto (input text y textarea) con identificadores.

El caso es que el código funciona bien con un parámetro. Si le intento pasar varios y hacer un split no lo logra. Os explico con código fuente:
Código HTML:
Ver original
  1. <textarea id="textoEscrito" rows="3" cols="87" onKeyPress="return capt(event);"></textarea>
  2. <input type="hidden" id="idConexion" value="1">

Esos son los dos campos que necesito enviar.
La función la lanzo así:
Código Javascript:
Ver original
  1. function capt(e){
  2.     var tcl = (document.all)?e.keyCode:e.which;
  3.     if (tcl==13){
  4.  
  5.         cargarContenidoPOST("pagina.php?accion=enviarMsg", "textoEscrito", "contenedorChat");
  6.        
  7.     }
  8. }

Y funciona de perlas con el segundo parámetro con valor "textoEscrito" que es el textarea.

Ahora el código fuente de la función ajax:
Código Javascript:
Ver original
  1. function cargarContenidoPOST(pagina, parametros, contenedor){
  2.  
  3.     contenedor = document.getElementById(contenedor);
  4.     envio = "";
  5.  
  6.         valor = document.getElementById(parametros).value;
  7.         envio += parametros+"="+valor+"&";
  8.  
  9.     ajax=nuevoAjax();
  10.     ajax.open('POST', pagina, true);
  11.     ajax.onreadystatechange=function() {
  12.    
  13.         if (ajax.readyState==4) {
  14.             contenedor.innerHTML = ajax.responseText
  15.         }
  16.  
  17.     }
  18.     ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  19.     ajax.send(envio);
  20. }

Y funciona de perlas.

Ahora viene el problema. Quiero enviar también el hidden con lo que hice esto:
Código Javascript:
Ver original
  1. function capt(e){
  2.     var tcl = (document.all)?e.keyCode:e.which;
  3.     if (tcl==13){
  4.  
  5.         cargarContenidoPOST("chat.php?accion=enviarMsg", "textoEscrito|idConexion", "contenedorChat");
  6.        
  7.     }
  8. }

Y modifico la función así:

Código Javascript:
Ver original
  1. function cargarContenidoPOST(pagina, parametros, contenedor){
  2.  
  3.     contenedor = document.getElementById(contenedor);
  4.     envio = "";
  5.     parametros.split("|");
  6.  
  7.     for(i in parametros) {
  8.  
  9.         valor = document.getElementById(parametros[i]).value;
  10.         envio += parametros[i]+"="+valor+"&";
  11.    
  12.     }
  13.  
  14.     ajax=nuevoAjax();
  15.     ajax.open('POST', pagina, true);
  16.     ajax.onreadystatechange=function() {
  17.    
  18.         if (ajax.readyState==4) {
  19.             contenedor.innerHTML = ajax.responseText
  20.         }
  21.  
  22.     }
  23.     ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  24.     ajax.send(envio);
  25. }

Y no va, no funciona! La consola de errores de firefox me dice que document.getElementById(parametros[i]) es nulo. ¿Cómo si funciona de uno, no funciona de dos?

Es un tema que me tiene muy mosca. Haciendo debug después de hacer split() a parametros me crea el array perfectamente.

Y otra cosa, que probé a cambiar el for(i in parametros) por for(i=0; i<parametros.length; i++) y tampoco va!

agradezco cualquier ayuda.

Desde ya, muchas gracias!
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.