Foros del Web » Programando para Internet » Javascript »

Ejecuta el script (ajax) antes de tener las variables de sesion

Estas en el tema de Ejecuta el script (ajax) antes de tener las variables de sesion en el foro de Javascript en Foros del Web. El código de abajo, hace ejecutar unas funciones ajax automaticamente. La primera vez que ejecutamos la pagina da un resultado erroneo porque el script (un ...
  #1 (permalink)  
Antiguo 10/10/2014, 03:51
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 13 años, 6 meses
Puntos: 1
Ejecuta el script (ajax) antes de tener las variables de sesion

El código de abajo, hace ejecutar unas funciones ajax automaticamente.
La primera vez que ejecutamos la pagina da un resultado erroneo porque el script (un archivo externo) no ha recibido todavía las variables de sesión.
Si refrescamos la página, todo funciona, porque le llegan las variables.

Archivo index.php

Código PHP:
<?php
session_start
();
$_SESSION['roomxx']=$room;

?>

<html>
    <head>
    <script src="ajax.js"></script>
<link type="text/css" rel="stylesheet" href="style.css" />
    </head>
    <body>

...etc
¿Como podría hacer que primero se envien las variable, y a continuación se ejecute el script?
  #2 (permalink)  
Antiguo 10/10/2014, 05:54
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Ejecuta el script (ajax) antes de tener las variables de sesion

Las variables de session son php por lo tanto no se mandan ya estan en el servidor. En todo caso se crean, pero como tu mismo puedes ver lo primero que hace este script que nos mandas es crear la variable de session.... claro que se crea con el contenido de una variable que no se ha definido previamente por lo tanto no tendrá tampoco ningun valor.


Código PHP:
Ver original
  1. <?php
  2.  
  3. $room="XX";
  4.  
  5. $_SESSION['roomxx']=$room;
  6.  
  7. ?>
  8.  
  9. <html>
  10.     <head>
  11.     <script src="ajax.js"></script>
  12. <link type="text/css" rel="stylesheet" href="style.css" />
  13.     </head>
  14.     <body>
  15.  
  16. ...etc

Ahora $_SESSION['roomxx'] serà igual a "XX" des del primer momento.

Código PHP:
Ver original
  1. <?php
  2. $_SESSION['roomxx']="XX";
  3. ?>

Esto seria lo mismo.

O nos muestras algo más de lo que estas haciendo o dificilmente te podremos ayudar.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 10/10/2014, 06:54
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Ejecuta el script (ajax) antes de tener las variables de sesion

Gracias por la respuesta quimfv

No he metido más código para intentar simplificar (el realidad el código es un iframe, dentro de un plugin de Community Builder, en Joomla) ...si os meto el código completo os vaís a marear.

La variable de sesión la he creado a partir de una varible recogida de Joomla...
$_SESSION['roomxx']=$room;
podría terner un valor cualquiera
$_SESSION['roomxx']="Fernandin";

Otra vez el código index.php

Código PHP:
<?php
session_start
();
 
....
 
$_SESSION['roomxx']=$room;
 
?>
 
<html>
    <head>
    <script src="ajax.js"></script>
<link type="text/css" rel="stylesheet" href="style.css" />
    </head>
    <body>
....
<div id="contenido">
    
    <div name="timediv" id="timediv">
</div>
....
Con un div (contenido) que se refrescara cada x minutos un archivo (contenido.php) gracias a un archivo "ajax.js"

contenido.php
Código PHP:
<?php
session_start
();

if (
$_SESSION['roomxx'] != ""){
$directorio "images/".$_SESSION['roomxx']."/"

    function 
ordenar($a,$b){ 
     global 
$directorio
     
$a filemtime($directorio.$a); 
... 
etc
Todo esto funciona cuando refrescamos la página, pero NO FUNCIONA la primera vez que abrimos porque el script se ejecuta antes que este disponible la variable de sesión $_SESSION['roomxx']
  #4 (permalink)  
Antiguo 10/10/2014, 07:12
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Ejecuta el script (ajax) antes de tener las variables de sesion

El archivo ajax.js (por si alguien tiene ganas de leerlo)

Código Javascript:
Ver original
  1. /*
  2. * Parametros mandatorios
  3. */
  4.     var seconds = 5; // el tiempo en que se refresca
  5.         var divid = "contenido"; // el div que quieres actualizar!
  6.         var url = "ordenar.php"; // el archivo que ira en el div
  7.      
  8.         function refreshdiv(){
  9.      
  10.             // The XMLHttpRequest object
  11.      
  12.             var xmlHttp;
  13.             try{
  14.                 xmlHttp=new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari
  15.             }
  16.             catch (e){
  17.                 try{
  18.                     xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
  19.                 }
  20.                 catch (e){
  21.                     try{
  22.                         xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  23.                     }
  24.                     catch (e){
  25.                         alert("Tu explorador no soporta AJAX.");
  26.                         return false;
  27.                     }
  28.                 }
  29.             }
  30.      
  31.             // Timestamp for preventing IE caching the GET request
  32.             var timestamp = parseInt(new Date().getTime().toString().substring(0, 10));
  33.             var nocacheurl = url+"?t="+timestamp;
  34.      
  35.             // The code...
  36.      
  37.             xmlHttp.onreadystatechange=function(){
  38.                 if(xmlHttp.readyState== 4 && xmlHttp.readyState != null){
  39.                     document.getElementById(divid).innerHTML=xmlHttp.responseText;
  40.                     setTimeout('refreshdiv()',seconds*1000);
  41.                 }
  42.             }
  43.             xmlHttp.open("GET",nocacheurl,true);
  44.             xmlHttp.send(null);
  45.         }
  46.      
  47.         // Empieza la función de refrescar
  48.      
  49.         window.onload = function(){
  50.             refreshdiv(); // corremos inmediatamente la funcion
  51.         }
  #5 (permalink)  
Antiguo 10/10/2014, 11:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Ejecuta el script (ajax) antes de tener las variables de sesion

Cita:
La variable de sesión la he creado a partir de una varible recogida de Joomla...
Código PHP:
Ver original
  1. <?php
  2.  
  3. .... // <---Estos suspensivos
  4.  
  5. $_SESSION['roomxx']=$room;
  6.  
  7. ?>

Por el comentario y los suspensivos, voy a suponer que $room es declarada y se le da valor en esos suspensivos.

En ese caso $_SESSION['roomxx'] existe antes de que pueda ejecutarse nada que este en ajax.js. Puesto que todo el codigo php se ejecuta en el servidor para preparar el html y js que va a mandar/servir al cliente. A la inversa todo el codigo javascript, ajax lo es, se ejecuta en el cliente, por lo tanto despues de ejecutar el php.

Finalmente podemos concluir con el codigo que vemos y el supuesto que hemos hecho que $_SESSION['roomxx'] ya existe cuando se carga y ejecuta ajax.js y este solicita al servidor el script "contenido.php", incluso la primera vez.

Eso se puede asegurar sin lugar a dudas. Por lo tanto lo único que nos puede fallar es la suposición inicial, voy a suponer que $room es declarada y se le da valor en esos suspensivos, al menos no la primera vez.

Cita:
...si os meto el código completo os vaís a marear.
Buen criterio, pero tendrás que mostrar algo más o investigar tu mismo, porque esa variable no tiene valor la primera vez que cargas el iframe.

"contenido.php" se carga a petición de ajax.js, no lo estarás cargando antes? (Eso tampoco lo vemos).

En ajax.js linea 6 estas cargando "ordenar.php" no "contenido.php".... ????
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 10/10/2014 a las 11:27

Etiquetas: ajax, ejecuta, funcion, html, js, php, tener, variables
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 05:01.