Foros del Web » Programando para Internet » PHP »

Modificar Variables Globales XAJAX

Estas en el tema de Modificar Variables Globales XAJAX en el foro de PHP en Foros del Web. Hola a todos Tengo el siguiente problema, lo que ocurre es que necesito modificar una varible global con una funcion xajax, pero no consigo hacerlo. ...
  #1 (permalink)  
Antiguo 05/04/2010, 08:20
Avatar de juankcres  
Fecha de Ingreso: septiembre-2009
Mensajes: 88
Antigüedad: 14 años, 7 meses
Puntos: 2
Pregunta Modificar Variables Globales XAJAX

Hola a todos

Tengo el siguiente problema, lo que ocurre es que necesito modificar una varible global con una funcion xajax, pero no consigo hacerlo.

les coloco un ejemplo:

Código PHP:
<?php


    
require_once ("xajax/xajax.inc.php");
    


        
    
$a 1;
    
$b 2;

    
//instanciamos el objeto de la clase xajax
    
$xajax = new xajax(); 
    
    
    function 
Sum()
    {
        
//instanciamos el objeto para generar la respuesta con ajax
           
$respuesta = new xajaxResponse();
        
        
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
        
$respuesta->addAlert($GLOBALS["b"]);
        
        return 
$respuesta;
    } 

    
    
    
    
    
    
//registramos la función creada anteriormente al objeto xajax
    
$xajax->registerFunction("Sum");
        
    
    
//El objeto xajax tiene que procesar cualquier petición
    
$xajax->processRequests();



?>
<html>
<head>
<title>Sumar</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="estilos.css" rel="stylesheet" type="text/css">
<?
   
//En el <head> indicamos al objeto xajax se encargue de generar el javascript necesario
   
$xajax->printJavascript("xajax/");
   
?>

</head>
<body>
<select onChange="xajax_Sum()"><option value="1">1</option><option value="2">2</option></select>

</body>
</html>
he probado con Xajax 0.25 y 0.5 y con ninguno obtengo el resultado en este caso que GLOBALS["$b"] se siga incrementando.

De antemano muchas gracias.
__________________
Sé fiel hasta la muerte, y yo te daré la corona de la vida.

Ap. 2:10
  #2 (permalink)  
Antiguo 05/04/2010, 08:29
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Modificar Variables Globales XAJAX

y si utilizas el operador global??

lee lo siguiente:
http://www.php.net/manual/en/languag...bles.scope.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 05/04/2010, 09:14
Avatar de juankcres  
Fecha de Ingreso: septiembre-2009
Mensajes: 88
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Modificar Variables Globales XAJAX

Tampoco Funciona, que otra cosa puedo probar??????
__________________
Sé fiel hasta la muerte, y yo te daré la corona de la vida.

Ap. 2:10
  #4 (permalink)  
Antiguo 05/04/2010, 09:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Modificar Variables Globales XAJAX

a ver, creo que tienes un problema.... recuerda que PHP es stateless osea que con cada ejecución vuelve a cargar el script desde cero, y así de nuevo cada ves...

entonces, no puedes mantener una variable global a través de varias cargas de un script...

en todo caso podrías usar variables de sesión, o cookies, etc...

pero mi pregunta sería, ¿que pretendes hacer?? ¿puedes explicar que es lo que buscas??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 05/04/2010, 09:17
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Modificar Variables Globales XAJAX

Pero ¿por qué no funciona? ¿Cómo lo hiciste? Tal vez no lo usaste correctamente.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 05/04/2010, 09:30
Avatar de juankcres  
Fecha de Ingreso: septiembre-2009
Mensajes: 88
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Modificar Variables Globales XAJAX

Dejo el codigo con la modificacion:

Código PHP:
<?php


    
require_once ("xajax/xajax.inc.php");
    


        
    
$a 1;
    
$b 2;

    
//instanciamos el objeto de la clase xajax
    
$xajax = new xajax(); 
    
    
    function 
Sum()
    {
        
//instanciamos el objeto para generar la respuesta con ajax
           
$respuesta = new xajaxResponse();
        global 
$a$b;
        
        
$b=$a+$b;
        
        
        
$respuesta->addAlert($b);
        
        return 
$respuesta;
    } 

    
    
    
    
    
    
//registramos la función creada anteriormente al objeto xajax
    
$xajax->registerFunction("Sum");
        
    
    
//El objeto xajax tiene que procesar cualquier petición
    
$xajax->processRequests();



?>
<html>
<head>
<title>Sumar</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="estilos.css" rel="stylesheet" type="text/css">
<?
   
//En el <head> indicamos al objeto xajax se encargue de generar el javascript necesario
   
$xajax->printJavascript("xajax/");
   
?>

</head>
<body>
<select onChange="xajax_Sum()"><option value="1">1</option><option value="2">2</option></select>

</body>
</html>
Lo otro perdón si estoy equivocado pero no se supone que con Xajax evitas volver a cargar una página.

- Lo otro lo quiero para seleccionar opciones para posteriormente hacer una consulta.
Estas opciones están separadas en submenu, entonces al seleccionar una opcion del submenu se muestran una serie de <select> con opciones para seleccionar dejando seleccionado el valor almacenado en la variable global. Al cambiar algún valor la idea es que cambien las variables globales para saber cuales selecciono.

Espero haberme hecho entender cualquier duda me dicen.

de antemano gracias por su ayuda.
__________________
Sé fiel hasta la muerte, y yo te daré la corona de la vida.

Ap. 2:10
  #7 (permalink)  
Antiguo 05/04/2010, 09:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Modificar Variables Globales XAJAX

no, no... ese es tu error, Ajax es un tecnología con la cual evitas cargar de nuevo -en el cliente- la pagina... pero eso no significa que PHP deje de ser stateless...

vamos, que el trabajo del servidor es siempre el mismo... siempre hay que ejecutar de nuevo los scripts, cada ves, etc...

XAjax es solo una clase que procesa la salida rumbo a tu pagina... en todo caso, dichos scripts no se quedan cargados en memoria y cosas del estilo...

como te digo, puedes usar en todo caso variables de sesión o cookies para obtener lo que buscas, ya que usar globales no sirve de nada... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 05/04/2010, 10:06
Avatar de juankcres  
Fecha de Ingreso: septiembre-2009
Mensajes: 88
Antigüedad: 14 años, 7 meses
Puntos: 2
De acuerdo Respuesta: Modificar Variables Globales XAJAX

Gracias pateketrueke por tu respuesta, creo que voy a tener el mismo problema con las variables de sesion ya que tendre que inicializarlas en la misma pagina por lo tanto al ejecutar otra funcion se me van a volver a inicializar.

Por eso decidí crear elementos de tipo hidden en donde le asigno un valor inicial y luego voy guardando los cambios en ellos.
__________________
Sé fiel hasta la muerte, y yo te daré la corona de la vida.

Ap. 2:10
  #9 (permalink)  
Antiguo 05/04/2010, 10:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Modificar Variables Globales XAJAX

Solo si explicitamente las inicializas, ya que puedes usar algo como esto:
Código PHP:
Ver original
  1. if (!isset($_SESSION['a'])) {
  2.         $_SESSION['a'] = 0;
  3. }
  4.  
  5. $_SESSION['a']++;

Si ejecutas ese código sencillo puedes ver que el valor se incrementa cada vez que recargas la pagina.

Saludos.
  #10 (permalink)  
Antiguo 21/04/2010, 12:21
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1
Antigüedad: 19 años, 4 meses
Puntos: 0
Respuesta: Modificar Variables Globales XAJAX

Hola,
Aprovecho este post para un problemita.
Resulta que tengo una función xajax que como salida entre otras cosas entraga un botón que al oprimirse debe volver a ejecutar la función (recursiva).
La primera ejecución la hace sin problemas ya que la orden viene desde afuera, pero no logro que se ejectute viniendo de la orden botón que ella misma generó.
Aquí les dejo el código para mejor entendimiento.
Si es posible mandar respuesta a [email protected] ya que aquí estoy aprovechando la respuesta para un post para exponer mi duda.
Muchas gracias.

Declaración y funciones XAJAX
<?php
require_once "xajax/xajax.inc.php";
require_once "clases/anunciantes.inc.php";
require_once "clases/tiposempresas.inc.php";
require_once "clases/TemplatePower.inc.php";
require_once "clases/fecha.inc.php";

$xajax = new xajax();
$xajax->setCharEncoding("ISO-8859-1");

$cantidad_anunciantes=Anunciante::cantidadresumenP referentes();
$primer_anunciante_amostrar=1;
$cantidad_anunciantes_amostrar=2;

function mostrar_adelante(){
global $cantidad_anunciantes,$primer_anunciante_amostrar, $cantidad_anunciantes_amostrar;
$respuesta= new xajaxResponse();
$primer_anunciante_amostrar+=$cantidad_anunciantes _amostrar;
$msg="$cantidad_anunciantes_amostrar&nbsp;$primer_ anunciante_amostrar";
$msg.=openTabla100(0).TR().TD();
$anunciantes = Anunciante::resumenPreferentes(); // el parámetro indica el tipo de empresa a filtar para mostrar
$i=1;
$j=1;
$msg.=openTabla100(0).TR().TD();
$msg.=openTabla100(0).TR().TDP(30,"center");
$msg.="<img src=\"Imagenes/creativos/oferta6.gif\" width=\"80\" height=\"80\">".nTD().TDP(70)."<span class=\"Estilo35\">".Tcol(3,"#cc0000").
"<strong>Ofertas especiales del mes para vuelos, hoteles y alquiler de coches.</strong>";
$msg.=nTD().nTR().closeTabla();
foreach($anunciantes as $idanunciante=>$anunciante) {
if ($j >= $primer_anunciante_amostrar){
$msg.=openTabla100(0);
$msg.=TR();
$msg.=TD();
$msg.="<span class=\"Estilo38\"><a href=lanzadera.php?$anunciante[13]&id=$idanunciante>$anunciante[0]</a>";
$msg.="<br><span class=\"Estilo38\">$anunciante[1]";
$msg.="<br><a href=lanzadera.php?$anunciante[13]&id=$idanunciante><strong><span class=\"Estilo40\">$anunciante[13]</strong></a>";
$msg.=nTD().nTR();
$msg.=closeTabla();
$i++;
if ($i > $cantidad_anunciantes_amostrar)
break;
}
$j++;
if ($j > $cantidad_anunciantes)
break;
}
$msg.=openTabla100(0).TR().TD("","right");
$msg.="<input type=\"button\" name=\"moving\" value=\"<\" onclick=\"xajax_mostrar_atras();\">";
//$msg.="<a href=\"javascript:xajax_mostrar_atras()\"><</a>";
if ($j < $cantidad_anunciantes)
$msg.="<input type=\"button\" name=\"moving\" value=\">\" onclick=\"xajax_mostrar_adelante();\">";
//$msg.="<a href=\"javascript:xajax_mostrar_adelante()\">></a>";
$msg.=nTD().nTR().closeTabla();
$msg.=nTD().nTR().closeTabla();
$msg.=nTD().nTR().closeTabla();

$respuesta->addAssign("anunciantes","innerHTML",$msg);
return $respuesta;
}

function mostrar_atras($mensaje){
global $cantidad_anunciantes,$primer_anunciante_amostrar, $cantidad_anunciantes_amostrar;
$respuesta= new xajaxResponse();
$primer_anunciante_amostrar-=$cantidad_anunciantes_amostrar;
$msg="";
$msg.=openTabla100(0).TR().TD();
$anunciantes = Anunciante::resumenPreferentes(); // el parámetro indica el tipo de empresa a filtar para mostrar
$i=1;
$j=1;
$msg.=openTabla100(0).TR().TD();
$msg.=openTabla100(0).TR().TDP(30,"center");
$msg.="<img src=\"Imagenes/creativos/oferta6.gif\" width=\"80\" height=\"80\">".nTD().TDP(70)."<span class=\"Estilo35\">".Tcol(3,"#cc0000").
"<strong>Ofertas especiales del mes para vuelos, hoteles y alquiler de coches.</strong>";
$msg.=nTD().nTR().closeTabla();
foreach($anunciantes as $idanunciante=>$anunciante) {
if ($j >= $primer_anunciante_amostrar){
$msg.=openTabla100(0);
$msg.=TR();
$msg.=TD();
$msg.="<span class=\"Estilo38\"><a href=lanzadera.php?$anunciante[13]&id=$idanunciante>$anunciante[0]</a>";
//$msg.=openTabla(0).TR().TD(0,"center").TCol(4,"bla ck")."<a href=\"$anunciante[11]\" target=\"_blank\"><strong>$anunciante[0]</strong></a>:".nTD().nTR().closeTabla();
$msg.="<br><span class=\"Estilo38\">$anunciante[1]";
$msg.="<br><a href=lanzadera.php?$anunciante[13]&id=$idanunciante><strong><span class=\"Estilo40\">$anunciante[13]</strong></a>";
$msg.=nTD().nTR();
$msg.=closeTabla();
$i++;
if ($i > $cantidad_anunciantes_amostrar)
break;
}
$j++;
if ($j > $cantidad_anunciantes)
break;
}
$msg.=openTabla100(0).TR().TD("","right");
if ($primer_anunciante_amostrar <> 1)
$msg.="<input type=\"button\" name=\"moving\" value=\"<\" onclick=\"xajax_mostrar_atras();\">";
$msg.="<input type=\"button\" name=\"moving\" value=\">\" onclick=\"xajax_mostrar_adelante();\">";
$msg.=nTD().nTR().closeTabla();
$msg.=nTD().nTR().closeTabla();
$msg.=nTD().nTR().closeTabla();

$respuesta->addAssign("anunciantes","innerHTML",$msg);
return $respuesta;
}

$xajax->registerFunction("mostrar_adelante");
$xajax->registerFunction("mostrar_atras");
$xajax->processRequests();

function createDiv($nombreId="",$contenido="") {
echo "<div id=\"$nombreId\">$contenido</div>\r\n";
}
?>
<head>
<?php
$xajax->printJavascript("xajax/");
?>
</head>


Script de donde ejecuto las funciones por primera vez

<?php

$msg="";
$msg.=openTabla100(0).TR().TD("","right");
$msg.="<input type=\"button\" name=\"moving\" value=\"<\" onclick=\"xajax_mostrar_atras();\">";
$msg.="<input type=\"button\" name=\"moving\" value=\">\" onclick=\"xajax_mostrar_adelante();\">";
$msg.=nTD().nTR().closeTabla();
$msg.=nTD().nTR().closeTabla();
$msg.=nTD().nTR().closeTabla();

createDiv("anunciantes",$msg);
?>

Cuando oprimo el botón ">" la primera vez se ejecuta muy bién pero el botón que genera la función que debe permitir ejecutarlo otra vez es como si no funcionara.

Etiquetas: globales, modificar, variables, xajax
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:15.