Foros del Web » Programando para Internet » Javascript » Frameworks JS »

A ver si esto esta correcto

Estas en el tema de A ver si esto esta correcto en el foro de Frameworks JS en Foros del Web. Hola Foro: Miren lo que necesito hacer a ver si me pueden dar una ayudita. Estoy haciendo un sistema de administración de noticias para una ...
  #1 (permalink)  
Antiguo 16/01/2006, 12:51
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
A ver si esto esta correcto

Hola Foro:
Miren lo que necesito hacer a ver si me pueden dar una ayudita. Estoy haciendo un sistema de administración de noticias para una web que debo presentar en un evento en unos días. El sistema consta de las cosas típicas:
* Adicionar
* Editar
* Eliminar
Pero entonces las categorías serían Noticias, Categorías de Noticias y RSS. Las acciones serían comunes a ambas tres. Ahora tengo una tabla en la BDatos llamada sp_categoriasnoticias con un campo llamado OrdenDeMuestra en el cual almacena el orden en el cual serán mostradas las categorías de las noticias. Por ejemplo el SELECT contiene numeros del 1 al 50 y entonces al adicionar una categoría a la misma se le debe dar un orden de muestra para luego al ponerlas en la parte que el usuario ve hacerlo con una consulta mas o menos asi:
Código PHP:
 SELECT FROM sp_categoriasnoticias ORDER BY OrdenDeMuestra 
y ordernar las categorías de noticias. Según mi lógica es imposible que dos categorías posean el mismo OrdenDeMuestra por lo que se me ocurrió poner un botón al lado del SELECT para dar la posibilidad al usuario de verificar si ese orden de muestra ya lo tiene asignado alguna caetgoria existente. Entonces eso lo quiero hacer con AJAX ya que es la forma que veo mejor para ello, no se si ustedes ven alguna otra. Entonces la lógica más o menos sería algo como esto:
1. Seleccionar categoría
2. Clicar en el boton para verficar que la misma este disponible
3. Si esta dispobible entonces enviar un mensaje al usuario diciendo que la categoria está disponible (puede ser un alert) o escribir en alguna parte de la pagina (puede ser un DIV al lado del select) el mensaje "La categoria no esta disponible".

Entienden?
Bueno aquí les dejo el código pero no se como hacer para enviar las alertas o los mensajes al usuario:

Código PHP:
<script language="javascript" type="text/javascript">
        function 
AJAXObj(){
            var 
xmlhttp=false;
            try {
                
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (
e) {
                try {
                    
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (
E) {
                    
xmlhttp false;
                }
            }

            if (!
xmlhttp && typeof XMLHttpRequest!='undefined') {
                
xmlhttp = new XMLHttpRequest();
            }
            return 
xmlhttp;
        }

        function 
chkPortable(){
            var 
el_selectel_contenedor;
            
el_select document.getElementById('cnOrdeDeMuestra').value;
            
el_contenedor document.getElementById('txtAjax');
            
aj_object AJAXObj();
            
aj_object.open("POST""admincpcatnews.php?opt=chk&chk"+el_select,true);
            
aj_object.onreadystatechange =function() {
                if (
aj_object.readyState==4) {
                    
el_contenedor.innerHTML aj_object.responseText
                
}
            }
            
aj_object.send(null)
        }
        
</script> 
Espero por su ayuda
Salu2
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 16/01/2006, 18:04
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 20 años, 11 meses
Puntos: 5
tu codigo se ve bien.... adiciona esto para ver:

en tu pagina del lado del server (php, asp, etc) TIENES que imprimir si todo esta bien o mal... a que me refiero con esto: si la categoria existe entonces debes mandarle un mensaje de error al usuario, ejemplo:

si categoria existe entonces
echo("existe la categoria");//PHP
response.write("existe la categoria") 'ASP
de otro modo
echo("0");
response.write("0")
fin de si



luego en tu AJAX cuando obtienes el responseText validas si es cero o texto... captas? asi:

Código PHP:
if (aj_object.readyState==4) { 
var 
_resultado aj_object.responseText;
if (
_resultado != "0") {
//alert(_resultado); //asi muestras el alert del mensaje al usuario
el_contenedor.innerHTML _resultado//asi muestras el mensaje del usuario en tu div
} else {
//lo que se te ocurra poner aqui si todo esta cool
}


espero te sirva

saludos


__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #3 (permalink)  
Antiguo 16/01/2006, 19:02
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Bueno ...

Hola Saruman:
Muchas gracias por tu respuesta. Claro que comprendí lo que me dijiste. Ahora me quedan algunas dudas por resolver al respecto. Por ejemplo cuando doy click en el boton para mandar a ejecutar el código AJAX me da este error de PHP:
Cita:
Notice: Undefined index: cID in D:\WebServer\WWW\simpro\admincp\admincpcatnews.php on line 48
Opci�n no disponible
Comprendo el error que me esta dando y es que el indice cID que estoy pasando a la consulta no existe. El indice lo obtengo asi de un elemento SELECT pero creo que no es la forma correcta:
Código PHP:
 el_select document.getElementById('cnOrdeDeMuestra').value;
 
aj_object.open("POST""admincpcatnews.php?opt=chk&cID"+el_select,true); 
me parece que la primera linea esta incorrecta para obtener el elemento seleccionado en un elemento SELECT valga las redundancias. Si alguien conoce la forma correcta favor de decirmelo para ver si no me da ese error. Lo otro que me esta pasando es que me recarga la pagina completa en el contenedor o sea en un elemento DIV que puse para poner el mensaje. No se el porque de esto. Miren el código aquí del AJAX aqui:
Código PHP:
function chkPortable(){
            var 
el_selectel_contenedor;
            
el_select document.getElementById('cnOrdeDeMuestra').value;
            
el_contenedor document.getElementById('txtAjax');
            
aj_object AJAXObj();
            
aj_object.open("POST""admincpcatnews.php?opt=chk&cID"+el_select,true);
            
aj_object.onreadystatechange =function() {
                if (
aj_object.readyState==4) {
                    var 
_resultado aj_object.responseText;
                    if (
_resultado != "0") {
                        
//alert(_resultado); //asi muestras el alert del mensaje al usuario
                        
el_contenedor.innerHTML _resultado//asi muestras el mensaje del usuario en tu div
                    
} else {
                        
//lo que se te ocurra poner aqui si todo esta cool
                        
el_contenedor.innerHTML _resultado;
                    }
                }
            }
            
aj_object.send(null)
        } 
y el de PHP aqui:
Código PHP:
if ( $mysql_version >= ){
            
$db->StartTrans();
            
$query $db->Execute("SELECT COUNT(cID) AS cantidad FROM ".cnf_DBPrefix."_categoriasnoticias WHERE (cDisplayOrder='".$_POST['cID']."')");
            
$db->CompleteTrans();
        } else {
            
$query $db->Execute("SELECT COUNT(cID) AS cantidad FROM ".cnf_DBPrefix."_categoriasnoticias WHERE (cDisplayOrder='".$_POST['cID']."')");
        }
        
        if (
$query){
            
$record $query->fetchRow();
            if ( 
$record[0] >= ){
                echo 
"Opción disponible";
            }else{
                echo 
"Opción no disponible";
            }
        } else {
            die(
$db->ErrorMsg());
        } 
¿Alguna sugerencia?

Lo otro es que quiero poner un GIF animado que tengo mientras la pagina esta realizando el proceso de verificación. Sabe alguien como hacer esto?

Salu2 y gracias por sus respuestas
__________________
Ing. Reynier Pérez Mira
  #4 (permalink)  
Antiguo 16/01/2006, 19:15
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Bueno ...

He estado buscando un poco en Internet porque me quedo por dentro el bichito de la opcion seleccionada en el elemento SELECT y ya encontre la solucion pero el error se mantiene igual. Este es el código cambiado:
Código PHP:
function chkPortable(){
            var 
el_selectel_contenedorsl_index;
            
sl_index document.getElementById('cnOrdeDeMuestra').selectedIndex 
            el_select 
document.getElementById('cnOrdeDeMuestra').options[sl_index].value;
            
el_contenedor document.getElementById('txtAjax');
            
aj_object AJAXObj();
            
aj_object.open("POST""admincpcatnews.php?opt=chk&cID"+el_select,true);
            
aj_object.onreadystatechange =function() {
                if (
aj_object.readyState==4) {
                    var 
_resultado aj_object.responseText;
                    if (
_resultado != "0") {
                        
//alert(_resultado); //asi muestras el alert del mensaje al usuario
                        
el_contenedor.innerHTML _resultado//asi muestras el mensaje del usuario en tu div
                    
} else {
                        
//lo que se te ocurra poner aqui si todo esta cool
                        
el_contenedor.innerHTML _resultado;
                    }
                }
            }
            
aj_object.send(null)
        } 
pero me sigue dando el mismo problema, no se si sea el "&" que esta aqui:
Código PHP:
aj_object.open("POST""admincpcatnews.php?opt=chk&cID"+el_select,true); 
alguna sugerencia?

Salu2 nuevamente
__________________
Ing. Reynier Pérez Mira
  #5 (permalink)  
Antiguo 16/01/2006, 20:57
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Buenas. No vi el código en detalle, la verdad, pero en la línea que citás me parece que te falta un signo "=". Esa podría ser la razón por la que el "index" cID no está definido.

Código:
aj_object.open("POST", "admincpcatnews.php?opt=chk&cID="+el_select,true);
Notá el "=" después de cID.

Suerte
Califa
  #6 (permalink)  
Antiguo 16/01/2006, 21:08
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Si eso mismo era

Efectivamente califa010. Tienes razon ya resolvi unos de los problemas. Me faltaba el signo de igualdad. Ahora solo me quedan los otros dos planteados. Que los replanteo un poco mas cortos por si alguien no quiere leer el post completo:
1) Cuando verfico en el elemento contenedor donde supuestamente debería solo salir el mensaje de texto me sale la pagina completa
2) Como hacer para poner una imagen o un cartel de cargando mientras el script este verificando datos en el servidor.

Salu2
__________________
Ing. Reynier Pérez Mira
  #7 (permalink)  
Antiguo 16/01/2006, 21:42
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Código PHP:
       if (aj_object.readyState==4) {
                    var 
_resultado aj_object.responseText;
                    if (
_resultado != "0") {
                        
//alert(_resultado); //asi muestras el alert del mensaje al usuario
                        
el_contenedor.innerHTML _resultado//asi muestras el mensaje del usuario en tu div
                    
} else {
                        
//lo que se te ocurra poner aqui si todo esta cool
                        
el_contenedor.innerHTML _resultado;
                    }
                } 
No sé si tendrá que ver, pero acá veo algo raro. Fijate que si se cumple la condición, se ejecuta esta línea:

Código PHP:
el_contenedor.innerHTML _resultado
Pero si no se cumple (else) ejecutás la misma línea.

Más allá de eso, nunca usé innerHTML (no hay ninguna razón en especial, simplemente costrumbre), así que no sé cómo debería comportarse. Tal vez podrías probar con "document.getElementById('campo_texto').value" . Pero, en realidad no sé si eso tendrá algo que ver.

En cuanto al .gif. no es muy difícil. Podrías poner la imagen dentro de un div y ese div lo ocultás o mostrás según esté cargada la respuesta o se esté procesando.

Si no me equivoco, el procesamiento en sí empieza cuando llamás a la función chkPortable(). Y termina cuando "readyState" es igual a 4.
Código PHP:
if (aj_object.readyState==4) { 
Yo haría lo siguiente (debe haber muchas otras maneras pero es la que se me ocurre ahora). Haría el div con la imagen en el html y le pondría un atributo style="visibility:hidden". Con lo cual la imagen inicialmente va a estar oculta.

Al principio de la función chkPortable() pondría:
(supongamos que al div le pusiste id="cargando")

Código:
document.getElementById('cargando').style.visibility = "visible";
Con eso lo estarías mostrando.

Cuandro entres a este if significa que llegó la respuesta.

Código:
if (aj_object.readyState==4) {
Entonces, ahí agregaría:

Código:
document.getElementById('cargando').style.visibility = "hidden";
con lo cual ocultarías el div con la imagen.

Suerte

Última edición por califa010; 16/01/2006 a las 22:30
  #8 (permalink)  
Antiguo 17/01/2006, 11:19
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Pues nada

Mira he modificado la función como sigue pero ahora el problema es que me parece que no esta verficando correctamente. Aquie esta el código AJAX:
Código PHP:
function chkPortable(){
            var 
el_selectel_contenedorsl_index;
            
sl_index document.getElementById('cnOrdeDeMuestra').selectedIndex 
            el_select 
document.getElementById('cnOrdeDeMuestra').options[sl_index].value;
            
el_imgLoader document.getElementById('imgLoader');
            
el_imgLoader.style.visibility "visible";
            
            
aj_object AJAXObj();
            
aj_object.open("GET""admincpcatnews.php?opt=chk&cID="+el_select,true);
            
aj_object.onreadystatechange = function() {
                if (
aj_object.readyState==4) {
                    
el_imgLoader.style.visibility "hidden"
                    var 
_resultado aj_object.responseText;
                    if (
_resultado != "0") {
                        
alert('Opcion no disponible'); 
                    } else {
                        
alert('Opcion disponible'); 
                    }
                }
            }
            
aj_object.send(null)
        } 
y aqui el código PHP:
Código PHP:
if ( $mysql_version >= ){
            
$db->StartTrans();
            
$query $db->Execute("SELECT COUNT(cID) AS cantidad FROM ".cnf_DBPrefix."_categoriasnoticias WHERE (cDisplayOrder='".$_GET['cID']."')");
            
$db->CompleteTrans();
        } else {
            
$query $db->Execute("SELECT COUNT(cID) AS cantidad FROM ".cnf_DBPrefix."_categoriasnoticias WHERE (cDisplayOrder='".$_GET['cID']."')");
        }
        
        if (
$query){
            
$record $query->fetchRow();
            if ( 
$record[0] >= ){
                echo 
"Opción no disponible";
            }else{
                echo 
"Opción disponible";
            }
        } else {
            die(
$db->ErrorMsg());
        } 
siempre me esta devolviendo opcion no disponible, aun cuando selecciono opciones que ya estan disponibles. Que estoy haciendo mal?

Salu2
__________________
Ing. Reynier Pérez Mira
  #9 (permalink)  
Antiguo 17/01/2006, 12:30
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 20 años, 11 meses
Puntos: 5
imprimiste para ver que te arroja la variable "el_select"?
a lo mejor no esta trayendotela.... que raro... lo demas se ve todo bien.

saludos
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #10 (permalink)  
Antiguo 17/01/2006, 17:06
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Bueno, acá hay algo que no entiendo.

Fijate que tu salida de php es

echo "Opción no disponible";
o
echo "Opción disponible";

pero lo que verificás desde el código js es si lo que devuelve php es "0" o no.

Talvez el echo debería ser "0" para no disponible y "1" para disponible, por ejemplo.
  #11 (permalink)  
Antiguo 17/01/2006, 17:45
 
Fecha de Ingreso: marzo-2005
Mensajes: 57
Antigüedad: 19 años, 1 mes
Puntos: 0
califa010 tiene razón.

Mediante php sacas estas 2 posibilidades:
Opción no disponible
Opción disponible

Y luego mediante javascript compruebas si lo que has sacado es 0 o no, por lo que siempre te dará que no.

Saludos
__________________
Alpa cine - Películas de cine con estrenos de cartelera
Compuntoes - Como es y punto

Última edición por esteno; 08/05/2006 a las 08:07
  #12 (permalink)  
Antiguo 17/01/2006, 18:28
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Pos nada

Miren ahora y diganme que esta mal. He chequeado el código y las condicionales nuevamente y nada de nada. Siempre me devuelve la opción "No verificado".
Segmento PHP
Código PHP:
 if ($query){
   
$record $query->fetchRow();
    if ( 
$record[0] >= ){
    echo 
"0";
    }else{
    echo 
"1";
    }
 } else {
  die(
$db->ErrorMsg());
 } 
Segmento AJAX:
Código PHP:
if (aj_object.readyState==4) {
  
el_imgLoader.style.visibility "hidden"
  var 
_resultado aj_object.responseText;
  if (
_resultado == "0") {
    
alert('Opcion no disponible'); 
  } else if(
_resultado == "1"){
    
alert('Opcion disponible'); 
  } else {
    
alert('No verificado'); 
  } 

Hice un alert (_resultado) y trae una pila de código HTML que es la página completa. El porque no lo se. Lo que si me di cuenta es que me da un warnign g de PHP al principio que dice que el indice $_POST['cID'] que le paso a la consulta a ejecutar no está definido lo que me da a entender que no está pasando el value del select para la pagina PHP. ¿Qué estoy haciendo mal?

Salu2
__________________
Ing. Reynier Pérez Mira
  #13 (permalink)  
Antiguo 17/01/2006, 22:41
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Mmm, no sé qué puede estar pasando. Se me ocurre una cosa. Tal vez esa advertencia está interfiriendo, porque estaría siendo parte de la salida de php. Para solucionarlo deberías hacer antes del primer if:

Código PHP:
if (isset($_GET['cID'])) {
     
// acá todo el código

Esto va a eliminar la advertencia de php.

Si aún así no va, haría el siguiente test:

Código PHP:
<?php
echo "0";
?>
Así le mandás un valor lo más simple posible. Si aún así no funciona, entonces ya podrías descartar que el error venga del lado de php.
  #14 (permalink)  
Antiguo 17/01/2006, 22:49
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Pues sip

Mira he checado y efectivamente no me esta pasado el cID y no se cual es la causa. Si en la función chkPortable() hago estos cambios:
Código PHP:
function chkPortable(){
 var 
el_selectel_contenedorsl_index;
 
sl_index document.getElementById('cnOrdeDeMuestra').selectedIndex 
 el_select 
document.getElementById('cnOrdeDeMuestra').options[sl_index].value;
 
alert (el_select);

Me pone el indice de la opcion que tengo seleccionada en ese momento por lo que creo que el error esta en esta linea de codigo pero no se donde:
Código PHP:
 aj_object.open("GET""admincpcatnews.php?opt=chk&cID="+el_select,true); 
Alguna sugerencia?

Y otra duda que tengo es cuando usar metodo POST y cuando GET a ver si tu me la puedes aclarar.

Salu2
__________________
Ing. Reynier Pérez Mira
  #15 (permalink)  
Antiguo 18/01/2006, 07:05
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Bueno, hice una prueba simplificando al máximo el esquema y funciona. El php sólo dice echo "0".

Acá está el código js. Lo modifiqué para que no tengas que crear y destruir el objeto XMLHttpRequest cada vez que te conectas, pero de la otra manera también funcionaba.

Fijate bien cómo estás llamando a las funciones, desde dónde/qué evento. Como mínimo, debería ser desde "body onLoad", porque te estás refiriendo a elementos html, que hasta que no se cargue la página, no existen. Te digo porque me pasó muchas veces poner getElementById('algunElemento') y si lo hacés antes de que la página cargue, va a aparecer como "undefined". Y ese error muchas veces corta la ejecución del script.

Para chequear que efectivamente existan, poné alerts una línea antes de referirte a algún elemento y fijate que diga HTML Element o por el estilo y no "undefined".

Suerte

Código:
<html>
<head>
<script language="javascript" type="text/javascript">
var conexion;
function AJAXObj(){
	conexion=false;
	try {
		conexion = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			conexion = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			conexion = false;
		}
	}

	if (!conexion && typeof XMLHttpRequest!='undefined') {
		conexion = new XMLHttpRequest();
	}
//	return xmlhttp;
}

function chkPortable(){
	var el_select, el_contenedor;
	el_contenedor = document.getElementById('txtAjax');
	alert(conexion);
	conexion.open("POST", "admincpcatnews.php",true);
	conexion.onreadystatechange =function() {
		if (conexion.readyState==4) {
			alert(conexion.responseText); // esto muestra "0"
		}
	}
	conexion.send(null)
}
</script> 
</head>
<body onLoad="AJAXObj();chkPortable();">
<input type="text" id="txtAjax" value="test">
</body>
</html>
  #16 (permalink)  
Antiguo 18/01/2006, 09:27
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Bueno ...

Hola califa:
¿Qué código tiene tu archivo PHP? Yo estoy trabajando con Smarty y con AdoDB y a lo mejor es por ello que mi PHP genera código extraño. Aquí debajo te pongo el código PHP completo del archivo admincpcatnews.php:
Código PHP:
<?
/**
 * Administración de Categorías de Noticias
 */
include_once('set_app.php');
switch (
$opt_method_get) {
 case 
"chk":
  if (isset(
$_GET['cID'])){
   if ( 
$mysql_version >= ){
    
$db->StartTrans();
    
$query $db->Execute("SELECT COUNT(cID) AS cantidad FROM ".cnf_DBPrefix."_categoriasnoticias WHERE (cDisplayOrder='".$_GET['cID']."')");
    
$db->CompleteTrans();
   } else {
     
$query $db->Execute("SELECT COUNT(cID) AS cantidad FROM ".cnf_DBPrefix."_categoriasnoticias WHERE (cDisplayOrder='".$_GET['cID']."')");
  }
        
 if (
$query){
  
$record $query->fetchRow();
  if ( 
$record[0] >= ){
   echo 
"0"
  }else{
   echo 
"1";
  }
 } else {
  die(
$db->ErrorMsg()); 
 }
} else {
 echo 
"cID no definido";
}
break;
}

$tpl->display("acp_catnews.tpl");
$tpl->clear_all_assign();
?>
Cita:
Acá está el código js. Lo modifiqué para que no tengas que crear y destruir el objeto XMLHttpRequest cada vez que te conectas, pero de la otra manera también funcionaba.
Esta parte no la comprendi. Me la podrias explicar un poquitin.

Cita:
Fijate bien cómo estás llamando a las funciones, desde dónde/qué evento. Como mínimo, debería ser desde "body onLoad", porque te estás refiriendo a elementos html, que hasta que no se cargue la página, no existen. Te digo porque me pasó muchas veces poner getElementById('algunElemento') y si lo hacés antes de que la página cargue, va a aparecer como "undefined". Y ese error muchas veces corta la ejecución del script.
Esto tampoco lo comprendi. Hasta ahora siempre habia usado document.getElementById('id').propiedad y nunca me habia dado problemas no se a que te refieres con ello.

Ahora porque llamas ambas funciones en el onload del body cuando en realidad me hacen falta en el onClick de un boton?

Salu2
__________________
Ing. Reynier Pérez Mira
  #17 (permalink)  
Antiguo 18/01/2006, 16:48
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Vamos de atrás para adelante:

Cita:
Ahora porque llamas ambas funciones en el onload del body cuando en realidad me hacen falta en el onClick de un boton?
Simplemente porque no tenía armado ningún select ni nada más. Estaba probando un código lo más simple posible. Cuando las cosas no andan, muchas veces lo mejor es hacer una copia y empezar a simplificarla, hasta que funcione. Y ahí empezás a agregar cosas más complejas. Entonces es más fácil detectar en qué punto está el conflicto.

Cita:
Fijate bien cómo estás llamando a las funciones, desde dónde/qué evento. Como mínimo, debería ser desde "body onLoad", porque te estás refiriendo a elementos html, que hasta que no se cargue la página, no existen. Te digo porque me pasó muchas veces poner getElementById('algunElemento') y si lo hacés antes de que la página cargue, va a aparecer como "undefined". Y ese error muchas veces corta la ejecución del script.
Durante mucho tiempo esto me dio problemas. Lo que quiero decir es que te asegures de getElementById se ejecute siempre sólo después de que la página cargó (on load). Si no, te estás refiriendo a un elemento que todavía no existe, está "undefined" y eso trae problemas en el script. Pero si hasta ahora no tuviste problemas, entonces lo estás haciendo de la forma correcta.

Cita:
Acá está el código js. Lo modifiqué para que no tengas que crear y destruir el objeto XMLHttpRequest cada vez que te conectas, pero de la otra manera también funcionaba.
Con el código anterior, cada vez que llamás a la función chkPortable() estás creando un nuevo objeto AJAX.

Está en esta línea:
aj_object = AJAXObj();

Ese objeto se asigna a una variable local. Una variable local es por ejemplo, una que está dentro de una función. Al terminarse la función, la variable se destruye. No podés acceder a ella ni referenciarla. De la otra manera, creás el objeto sólo una vez, cuando carga la página (onLoad) y la asignás a una variable global. Una variable es global cuando se declara en el cuerpo del script, por ejemplo, fuera de una función. A diferencia de una local, existe durante toda la ejecución del script. La podés usar y referenciar desde cualquier lado (incluso desde adentro de una función).

(No es necesario hacerlo así, pero por lo que leí, es más recomendable. Y vuelvo sobre el punto anterior: la llamada a la función chkPortable() la hice también desde onLoad, sencillamente porque no tenía los selects y quería probar el funcionamiento del código con sólo cargar la página. En tu caso, esta última llamada no va a estar en el body onLoad.

Por último, no uso muchas librerías en php y nunca usé ninguna de esas dos que mencionás. El código que usé en php, como te dije, es sólo esto:

Código PHP:
<?php
echo "0";
?>
¿Para qué? Simplemente para ver si el JavaScript estaba funcionando o si el problema estaba en php. Si probás todo junto, es mucho más difícil aislar los errores (que es el primer paso para solucionarlos). Bueno, lo que podrías hacer ahora es chequear que el código php funcione correctamente, así te sacás la duda. Simplemente ejecutá el archivo desde el navegador y fijate si devuelve por pantalla lo que querés que devuelva. Pasale manualmente el parámetro cID (o sea http://www.tudominio.com/admincpcatn...?opt=chk&cID=1 , etc) y fijate si anda bien. Si es así, ya sabés que el script php está bien y no hace falta tocarlo. Ya irías descartando un problema.
  #18 (permalink)  
Antiguo 18/01/2006, 18:50
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Ya está ....

Hola califa:
Ya he solucionado el problema y efectivamente me devolvia cantidad de código HTML generada por Smarty. Debajo pongo la solución.
Código AJAX:
Código PHP:
function AjaxObj(){
            
conexion false;
            try {
                
conexion = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (
e) {
                try {
                    
conexion = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (
E) {
                    
conexion false;
                }
            }

            if (!
conexion && typeof XMLHttpRequest != 'undefined') {
                
conexion = new XMLHttpRequest();
            }
        }

        function 
chkPortable(){
            var 
el_selectel_contenedorsl_index;
            
sl_index document.getElementById('cnOrdeDeMuestra').selectedIndex;
            
el_select document.getElementById('cnOrdeDeMuestra').options[sl_index].value;

            
el_imgLoader document.getElementById('imgLoader');
            
el_imgLoader.style.visibility "visible";

            
el_contenedor document.getElementById('txtAjax');

            
alert(conexion);

            
conexion.open("GET""admincpcatnews.php?opt=chk&cID="+el_select,true);
            
conexion.onreadystatechange =function() {
                if (
conexion.readyState==4) {
                    
el_imgLoader.style.visibility "hidden";
                    var 
_resultado conexion.responseText;
                    if (
_resultado == "0") {
                        
alert('Opcion no disponible');
                    } else if(
_resultado == "1"){
                        
alert('Opcion disponible');
                    } else {
                        
alert('No verificado');
                    }
                }
            }
            
conexion.send(null)
        } 
y lo que hice en la pagina PHP fue lo siguiente:
Código PHP:
$opt_method_get        = isset ( $_GET['opt'] ) ? $_GET['opt'] : null;

if (
$opt_method_get != "chk"){
    
$tpl->display("acp_catnews.tpl");

y entonces no me genera todo el código HTML sino que solamente 0 o 1. Ahora lo que quiero hacer es la parte de la imagen pero no se como ponerle una espera para que la misma se muestre. Es decir como la app la estoy probando de forma local las consultas a la BDatos se realizan muy rapidas por lo que me parece que no da tiempo a que me salga la imagen. Lo que quiero saber si existe alguna forma de dar un espacio de tiempo para ver que la imagen funciona a la perfeccion y luego quitarla cuando la ponga online.

Salu2
__________________
Ing. Reynier Pérez Mira
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 22:58.