Retroceder   Foros del Web > Programación para sitios web > AJAX

Respuesta
 
Herramientas Desplegado
Antiguo 27-feb-2008, 00:20   #1 (permalink)
joseverdugo ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2008
Mensajes: 8
Pregunta Refrescar lista desplegable de pagina padre desde pagina hija en ie6

Hola, tengo una pagina en php para agregar una persona, en la que tiene una lista desplegable (select) para seleccionar el sistema de previsión. Si la previsión no esta, existe un link a un pupop para agregarla.

Esto me funciona en IE7 y Firefox.

Pido su ayuda para que esto también funcione en IE6.

Además cada vez que presiona el link para abrir el pupop este se refresca como corresponde. pero no cuando se actualiza la hija al agregar

Codigo php de pagina padre persona.php.
Código PHP:
<head>
…….
<script language="JavaScript" src="../js/recargacombo.js" type="text/javascript"></script>
…….
</head>
<body>
………
<select name=" codprevision" id=" codprevision" tabindex="15">
          <?php 
          $prevision
->lista_select();  // rellena las opciones
?>
</select>
…….
</body>
Codigo php pagina hija previsión.php
Código PHP:
<head></head>
<!--
lamada a recarga de combox padre-->
<
body onLoad="opener.cargaCombo('codprevision ')"
<!
—codigo de editareliminar y agregar-->
</
body
Codigo ajax recargacombo.js
Código PHP:
function nuevoAjax()

    var 
xmlhttp=false;
    try
    {
        
// Creacion del objeto AJAX para navegadores no IE
        
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(
e)
    {
        try
        {
            
// Creacion del objet AJAX para IE
            
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(
E)
        {
            if (!
xmlhttp && typeof XMLHttpRequest!='undefined'xmlhttp=new XMLHttpRequest();
        }
    }
    return 
xmlhttp
}

function 
cargaContenido(idSelectDestino)
{

        
// Obtengo el elemento del select que debo cargar        
        
var selectDestino=document.getElementById(idSelectDestino);    
        
        
// Creo el nuevo objeto AJAX y envio al servidor el ID del select
        
var ajax=nuevoAjax();
        
ajax.open("GET""../js/recargacombo.php?select="+idSelectDestino+"&tab="+selectDestino.tabIndextrue);
        
ajax.onreadystatechange=function() 
        { 
            
            if (
ajax.readyState==4)
            {
                
selectDestino.parentNode.innerHTML=ajax.responseText;
            } 
        }
        
ajax.send(null);
    


Codigo de pagina php que llama javascript recagacombo.php

Código PHP:
<?php
require("../class/prevision.php");

$combo=$_GET["select"];
$index=$_GET["tab"];
if(
$combo == "codprevision")
{
    echo 
"<select name=\"".$combo."\" id=\"".$combo."\" tabindex=\"".$index."\" >";
    
$obj = new previcion();
    
$obj->lista_select();  //crear las opciones del combox
    
echo   "</select>";    
}
?>
Espero que me ayuden con este problema

pd:
En la pagina hija agregue <body onLoad="opener.cargaCombo('codprevision ')"> ya que en esta pagina puede eliminar, editar y agregar previsión.

En la pagina padre esta la referencia al archivo js contiene la función cargaContenido
joseverdugo está desconectado   Responder Citando
Antiguo 19-mar-2008, 13:48   #2 (permalink)
Casper2007 ha deshabilitado el karma
 
Fecha de Ingreso: junio-2007
Mensajes: 10
De acuerdo Re: Refrescar lista desplegable de pagina padre desde pagina hija en ie6

Hola Joseverdugo

podrias poner el codigo completo de todas las paginas que se involucran (solo de estas que haces mencion) en tu problema, para poder darte una solucion completa y definitiva...

gracias
Casper2007 está desconectado   Responder Citando
Antiguo 20-mar-2008, 05:33   #3 (permalink)
joseverdugo ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2008
Mensajes: 8
Re: Refrescar lista desplegable de pagina padre desde pagina hija en ie6

Hola Casper2007

Gracias por tu interés en responder mi duda, pero ya la encontré.

El problema era producido en IExplorer y solo la primera llamada al Server funcionaba y las siguientes respondia lo mismo q el primer request.

Me entere que esto ocuria dado que IE6 guardaba la primera respuesta de la llamada al Server en su cache Para optimizar, si preguntaba lo mismo respondía siempre la primera llamada.


extrato codigo ajax recargacombo.js

Antes:
Código PHP:
ajax.open("GET""../js/recargacombo.php?select="+idSelectDestino+"&tab="+selectDestino.tabIndextrue); 
Ahora:
Código PHP:
ajax.open("GET""../js/recargacombo.php?select="+idSelectDestino+"&tab="+selectDestino.tabIndex+"&aleat="+Aleatorio(), true); 
Si te fijas agrege a la llamada al server un parametro aleatorio para engañar a IE6 de que la llamada es distinta a la anterior.

y con tan solo este cambio el problema se soluciona.

saludos
joseverdugo está desconectado   Responder Citando
Antiguo 24-mar-2008, 12:33   #4 (permalink)
LoverBoy ha deshabilitado el karma
 
Avatar de LoverBoy
 
Fecha de Ingreso: marzo-2008
Mensajes: 2
Cool Re: Refrescar lista desplegable de pagina padre desde pagina hija en ie6

hola Jose Verdugo...

tengo un problema muy similar al tuyo, lo que pretendo realizar es que de la pagina padre (registrar.php) hace un llamado a una pagina hija (agregaremitente.php) osea que si un remitente no existe lo doy de alta en la pagina hija, una vez capturado el remitente que necesito, al cerrar la pagina hija, el combo (o lista) debe estar actualizado con el registro que apenas di de alta (obviamente sin refrescar la pagina padre), pero definitivamente no lo he logrado conseguir... si fuera mucha molestia (y si no te causa problemas) pusieras el codigo completo de las paginas a que haces referencia en tu codigo... esto para poder solucionar mi problema.... te agradece infinitamente... o podrias enviarlo a mi correo...

antes ya mil gracias y saludos

LoverBoy
mascada2006@yahoo.com.mx

Última edición por LoverBoy; 28-mar-2008 a las 15:31.
LoverBoy está desconectado   Responder Citando
Antiguo 31-mar-2008, 15:02   #5 (permalink)
joseverdugo ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2008
Mensajes: 8
Re: Refrescar lista desplegable de pagina padre desde pagina hija en ie6

Hola.

Te dejo todo el codigo, desarrollado en postgres con php5 y probado en ie6, ie7 y firefox

afp.php
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>AFP</title>
<script type="text/javascript">
function valida_form(f)
{        
    f.submit();            
}
</script>

</head>
<!--Si esta pagina tiene padre, cargar el contenido del combo afp del padre -->
<body onLoad="if(opener != null)opener.cargaContenido('codafp')">

<?php
require("afp.class.php");
require(
"db.class.php");

$obj = new afp();
$msg='';

if(isset(
$_GET["opcion"])){
    
    if(
$_GET["opcion"] == "editar"){
        
$obj->get($_GET["codafp"]);        
    }    
    if(
$_GET["opcion"] == "save"){
        
        
$obj->setcodAfp($_GET["cod"]);

        if(
$_GET["cod"] == null)
        
$obj->setcodAfp("null");
        
$obj->setletra("null");
        
$obj->setnombre($_GET["nombre"]);
        
$obj->setporcentaje($_GET["porcentaje"]);        
        
        
$cod $obj->getcodAfp();
        
//guardando
        
$obj->save();        
        

    }
}
?>


<p><strong>Agregar/editar Afp</strong></p>
<form id="form1" name="form1" method="get" action="<?php echo $_SERVER['PHP_SELF'];?>">
<input type="hidden" name="cod" id="cod" value="<?php echo $obj->getcodAfp();?>" />
<input type="hidden" name="opcion" id="opcion" value="save" />
  <table border="0">
    
    <tr>
      <th scope="row"><div align="left">Nombre</div></th>
      <td>
        <input type="text" name="nombre" id="nombre" tabindex="1" value="<?php echo $obj->getnombre();?>" />
     </td>
    </tr>
    <tr>
      <th scope="row"><div align="left">Porcentaje</div></th>
      <td>
        <input type="text" name="porcentaje" id="porcentaje" tabindex="2" value="<?php echo $obj->getporcentaje();?>" />
      
      </td>
    </tr>
   
  </table>
  <p>
    <label>
    <input type="button" name="button" value="Guardar" onclick="valida_form(this.form)" tabindex="4" />    
    </label>

  </p>
   
  <?php 
  
echo $msg;
  
?>
  

</form>


<?php
$obj
->verconsulta();
?>
</body>

</html>
afp.class.php
Código PHP:
<?php

class afp{
    
/*campo codAfp*/
    
private  $codAfp;
    public function 
setcodAfp($col){
        
$this->codAfp $col;
    }
    public function 
getcodAfp(){
        return 
$this->codAfp;
    }

    
/*campo nombre*/
    
private  $nombre;
    public function 
setnombre($col){
        
$this->nombre $col;
    }
    public function 
getnombre(){
        return 
$this->nombre;
    }

    
/*campo porcentaje*/
    
private  $porcentaje;
    public function 
setporcentaje($col){
        
$this->porcentaje $col;
    }
    public function 
getporcentaje(){
        return 
$this->porcentaje;
    }

    
/*campo letra*/
    
private  $letra;
    public function 
setletra($col){
        
$this->letra $col;
    }
    public function 
getletra(){
        return 
$this->letra;
    }

    function 
afp(){
        
$this->codAfp null;
        
$this->nombre null;
        
$this->porcentaje null;
        
$this->letra null;
    }
    
    function 
get($valor)
    {
        if(
$valor == null)
            return 
false;
            
        
$objDB = new db();
        
$sql "select * from \"afp\" where \"codAfp\" = $valor;";
        if(!
$objDB->query($sql) ){
            
$objDB->geterror();
            
//tratar errorreturn false;
        
}
        if(
$objDB->num() < 1){
            return 
false;
        }
        
$objetos $objDB->fetch();
        
$this->codAfp $objetos['codAfp'];
        
$this->nombre $objetos['nombre'];
        
$this->porcentaje $objetos['porcentaje'];
        
$this->letra $objetos['letra'];
        
$objDB->free();
        
$objDB->close();
        return 
$this;
    }
    
    function 
save(){
        
$objDB = new db();

        
$this->sql "select insertafp('$this->nombre', $this->porcentaje, $this->codAfp )";
        
        if(!
$objDB->query($this->sql) ){            
            return 
false;
        }

        
$cod $objDB->fetch();

        
$this->setcodAfp($cod[0]);
    }
    

    
/* Muestra los datos en una tabla html*/
    
function verconsulta() {
        
$objDB = new db();
        
$sql "select * from vista_afp";
        if(!
$objDB->query($sql) ){
            
            return 
false;
        }


        echo 
"<table border=\"2\" align=\"left\" cellpadding=\"0\" cellspacing=\"2\" >\n";
        echo 
"<tr>\n";
        
// mostramos los nombres de los campos
        
for ($i 0$i $objDB->numcampos(); $i++){
            echo 
"<td><b>".$objDB->nombrecampo($i)."</b></td>\n";
        }
        echo 
"<td><b>Editar</b></td>\n";    

        echo 
"</tr>\n";

        
// mostrarmos los registros
        
while ($row $objDB->fetch()) {

            echo 
"<tr> \n";

            for (
$i 0$i $objDB->numcampos(); $i++){
                if(
$row[$i] == null and $i == ){
                    echo 
"<td>Total</td>\n";
                }else{
                    if(
$row[$i] == null){
                        echo 
"<td align=\"center\">-</td>\n";
                    }else{
                        echo 
"<td>".$row[$i]."</td>\n";
                    }
                }

            }
            
            echo 
"<td><a href=\"".$_SERVER['PHP_SELF']."?opcion=editar&amp;codafp=".$row['Cod AFP']."\">Editar</a></td>";                        
            echo 
"</tr>\n";
            
            
        }
        echo 
"</table>";
    }

    function 
lista_select() {
        
$objDB = new db();
        
$sql "select \"codAfp\" as cod, nombre from afp order by nombre";
        if(!
$objDB->query($sql) ){            
            return 
false;
        }        

        
$n $objDB->numcampos();
        while (
$row $objDB->fetch()) {
            if(
$this->codAfp == $row['cod'])
                echo 
"<option value=\"".$row['cod']."\" selected=\"selected\">".$row['nombre']."</option>";
            else            
                echo 
"<option value=\"".$row['cod']."\">".$row['nombre']."</option>";

        }
    }


}
?>
joseverdugo está desconectado   Responder Citando
Antiguo 31-mar-2008, 15:03   #6 (permalink)
joseverdugo ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2008
Mensajes: 8
Re: Refrescar lista desplegable de pagina padre desde pagina hija en ie6

afp.php es la pagina que es llamada desde index.php por un link [+] y al insertar una afp se recarga el combo de index.php

faltan mas codigos, ya casi termino....

Última edición por joseverdugo; 31-mar-2008 a las 15:08. Razón: envio de claves de usuario db
joseverdugo está desconectado   Responder Citando
Antiguo 31-mar-2008, 15:03   #7 (permalink)
joseverdugo ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2008
Mensajes: 8
Busqueda Re: Refrescar lista desplegable de pagina padre desde pagina hija en ie6

mas...


db.class.php
Código PHP:
<?php
require ("inc.config.php");

class 
db {
    
/* Variable de conexion*/
    
var $servidor;
    var 
$puerto;
    var 
$nombreBD;
    var 
$nombreDeUsuario;
    var 
$contrasena;

    
/* identificador de conexion y consulta */
    
var $enlace;
    var 
$resultado;
    var 
$consulta_id;
    var 
$sql;

    
/* texto error */
    
var $Error "";  //texto de error dado por postgres
    
var $Errno 0;   //numero de error
    
var $Errtex ""//texto de error a mostrar

    
function db(){
        
/* Declaracion de Variable de datos de conexion */
        
global $cfg;
        
/* asignacion de variables globales*/
        
$this->servidor $cfg->servidor;
        
$this->puerto $cfg->puerto;
        
$this->nombreBD $cfg->nombreBD;
        
$this->nombreDeUsuario $cfg->nombreDeUsuario;
        
$this->contrasena $cfg->contrasena;
        
        
/* Al llamar al constructor se estable crea inmediatamente la coneccion */
        /* si la coneccion se pierde se puede volver a conectar con obj->connect() */        

        
$this->connect();
    }
    
/* metodo conexion*/
    
function connect(){
        global 
$cfg;
        
/*creacion de string de conexion*/
        
$sConn "host=$this->servidor port=$this->puerto dbname=$this->nombreBD user=$this->nombreDeUsuario password=$this->contrasena";
        
/*conectar*/
        
$this->enlace pg_connect($sConn);

        
/* si la coneccion fallo, se intenta nuevamente en x segundo mas*/
        
if($cfg->reconect && !$this->enlace){
            
sleep($cfg->se_reconect);
            
$this->enlace pg_connect($sConn);
        }
        
/* si falla otra vez, se controla el error*/
        
if (!$this->enlace) {
            
$this->errControl("Ha fallado la conexión");
            return 
false;
        }
    }
    
/*metodo de ejecucion de consultas*/
    
function query($sql){
        
$this->sql $sql;

        if (
$this->sql == "") {
            
$this->errControl("No ha especificado una consulta SQL");
            return 
false;
        }

        
$this->consulta_id pg_query($this->enlace,$this->sql);

        if (!
$this->consulta_id) {
            
$this->errControl("Consulta Invalida");
            return 
false;
        }


        
        return 
true;
    }
    
/*recuperar registros*/
    
function fetch(){
        if(
$this->resultado pg_fetch_array($this->consulta_id)){
            return 
$this->resultado;

        }else{
            
// entra en este caso cuando se acaban los registros
            // no por error, es para que termine el while.
            
return false;
        }
    }

    
/* fetch que retorna todo en una matriz asociativa y numerica*/
    /* ejemplo de uso
    $tabla = $objDB->fetchm();    
    $n = count($tablas);
    for($i = 0; $i < $n; $i++){
            echo $tabla[$i][0]."\r\n";
    }    
    */
    
function fetchm(){
        
$i false;

        while( 
$fila $this->fetch() ){
            
$res[]= $fila;
            
$i true;
        }
        if(
$i)
        return 
$res;
        else
        
false;
    }

    
/* numero de campos*/
    
function numcampos() {
        return 
pg_num_fields($this->consulta_id);
    }

    
/* Devuelve el número de registros de una consulta */
    
function num(){
        return 
pg_num_rows($this->consulta_id);
    }

    
/* Devuelve el nombre de un campo de una consulta */
    
function nombrecampo($numcampo) {
        return 
pg_field_name($this->consulta_id$numcampo);
    }
    
/* Devuelve el tipo de un campo de una consulta */
    
function typecampo($numcampo) {
        return 
pg_field_type($this->consulta_id$numcampo);
    }
    
/* Muestra los datos en html de una consulta */
    
function verconsulta() {

        echo 
"<table width=\"895\" border=\"2\" align=\"center\" cellpadding=\"0\" cellspacing=\"2\" bordercolor=\"#70D361\">\n";

        
// mostramos los nombres de los campos
        
for ($i 0$i $this->numcampos(); $i++){
            echo 
"<td><b>".$this->nombrecampo($i)."</b></td>\n";
        }

        echo 
"</tr>\n";

        
// mostrarmos los registros
        
while ($row $this->fetch()) {

            echo 
"<tr> \n";

            for (
$i 0$i $this->numcampos(); $i++){
                if(
$row[$i] == null and $i == ){
                    echo 
"<td>Total</td>\n";
                }else{
                    if(
$row[$i] == null){
                        echo 
"<td align=\"center\">-</td>\n";
                    }else{
                        echo 
"<td>".$row[$i]."</td>\n";
                    }
                }

            }

            echo 
"</tr>\n";

        }
    }



    
/* Metodo para almacenar errores*/
    
function saveError(){
        global 
$cfg;
        
/*
        // Creacion de mensaje a almacenar
        $errorT = "-ERROR : ".$this->Errtex."\r\n" ;
        $fecha = "\t[".date("d")."-".date("n")."-".date("y")."]"."[".date("H").":".date("i").":".date("s")."]\r\n";
        $pagina = "\tDesde Pagina: ".$_SERVER['PHP_SELF']."\r\n";
        $ip = "\tIP: ".$_SERVER['REMOTE_ADDR']."\r\n";

        $error = "\t\"".$this->Error."\"\r\n";
        $sql =  "\t\"".$this->sql."\"\r\n";

        $save = $errorT.$fecha.$pagina.$ip.$error.$sql;

        
        // guardando en archivo
        $archivo = "../log/error.log";
        $ddf = fopen($archivo,'a+');
        fwrite($ddf, $save);
        fclose($ddf);
        */

    
}

    
/* control de errores */
    
function errControl($msg){

        
$this->Errno "";
        
$this->Error pg_last_error($this->enlace);
        
$this->Errtex $msg;
        
$this->saveError();

    }

    
    
    function 
free(){
        
pg_free_result($this->consulta_id);
        return 
true;

    }
    function 
close(){
        
pg_close($this->enlace);
        return 
true;
    }

    
}
// Fin Clase
?>

inc.config.php
Código PHP:
<?php

$cfg
->servidor "localhost"
$cfg->nombreBD "nombredb";
$cfg->puerto 5432
$cfg->nombreDeUsuario "user";
$cfg->contrasena