Foros del Web » Programando para Internet » Javascript »

funcion js que necesita peticiones al servidor

Estas en el tema de funcion js que necesita peticiones al servidor en el foro de Javascript en Foros del Web. Hola espero que me puedan ayudar con mi problema, es el siguiente, a traves de ajax cambio los valores de un archivo xml, hasta aqui ...
  #1 (permalink)  
Antiguo 08/10/2011, 08:07
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 11 meses
Puntos: 10
funcion js que necesita peticiones al servidor

Hola espero que me puedan ayudar con mi problema, es el siguiente, a traves de ajax cambio los valores de un archivo xml, hasta aqui todo va bien pero luego creo una funcion js donde muestro los valores del archivo xml, hasta aqui todo bien, pero lo que no consigo es cuando cambio los valores del archivo xml que la funcion MostrarNombres tambien me los cambie, tendria que hacer una nueva peticion al servidor o algo asin pero no se como crear estas nuevas peticiones cada vez que cambia el archivo xml.

Las funciones que utilizo son estas:
Código Javascript:
Ver original
  1. var procesamiento, xml = null, contador=0;
  2.     function MostrarRegistro() {
  3.             try {
  4.                     document.getElementById("registro").innerHTML ='<p>'+ xml.getElementsByTagName('seccion')[contador].firstChild.nodeValue+'</p>';
  5.                     contador ++;
  6.             }
  7.             catch(e) {
  8.                            document.getElementById("registro").innerHTML = '';
  9.                            contador = 0;
  10.             }
  11.     }
  12.      
  13.     function MostrarNombres() {
  14.             var ajax = objetoAjax();
  15.             ajax.open('get','archivo.xml');
  16.             ajax.onreadystatechange = function() {
  17.                     if(ajax.readyState == 4){
  18.                             if(ajax.status == 200) {
  19.                                     xml=ajax.responseXML;
  20.                                     if(xml.getElementsByTagName('seccion').length > 0)
  21.                                             procesamiento = window.setInterval(MostrarRegistro, 4000);
  22.                             }
  23.                     }
  24.             }
  25.             ajax.send(null);
  26.     }
  27.      
  28.      
  29.     function objetoAjax()   {
  30.             if (window.XMLHttpRequest)
  31.                 _ajax = new XMLHttpRequest();
  32.             else
  33.                 if (window.ActiveXObject)
  34.                     _ajax = new ActiveXObject("Microsoft.XMLHTTP");
  35.                 else
  36.                     _ajax = false;
  37.             return _ajax;
  38.         }
  39.        
  40.     window.onload=MostrarNombres();
  41.      
  42.      
  43.     function pedir(dato) {
  44.         Ajax = objetoAjax();
  45.         Ajax.open("get","recuperar.php?seccion=" + dato, true);
  46.         Ajax.onreadystatechange = function() {
  47.           if (Ajax.readyState == 4 && (Ajax.status == 200 || Ajax.status == 501)){
  48.            document.getElementById('recuperar_datos').innerHTML=Ajax.responseText;
  49.             }
  50.          }
  51.          Ajax.send(null);
  52.         }

y en el script donde tengo que mostrar los datos de la funcion MostrarNombres tengo un select con el evento onchange y la funcion pedir(), hasta aqui es lo que me funciona bien, osea que el xml me lo cambia segun la opcion que elija en el select.

seria algo asin:

Código PHP:
Ver original
  1. <head>
  2.             <script type="text/javascript" language="javascript" src="funciones.js"></script>
  3.     </head>
  4.     <body>
  5.     <form method="get">
  6.     <select name="seccion" id="seccion" onchange="pedir(document.getElementById('seccion').value)">
  7.         ...
  8.     </select>
  9.     </form>
  10.        
  11. <div id="recuperar_datos"></div>
  12.      
  13. <div id="registro"></div>

y en el script recuperar.php creo el xml que me cambiara de forma asincronica, en resumen, yo quiero que cuando cambie de forma asincronica el archivo xml, la funcion MostrarNombres que me carga en pantalla actualice sus valores tambien de forma asincronica.

Espero que se me entienda esto y me puedan ayudar a entender como hacerlo, saludos.

Última edición por azaz; 08/10/2011 a las 08:12
  #2 (permalink)  
Antiguo 08/10/2011, 10:01
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 6 meses
Puntos: 834
Respuesta: funcion js que necesita peticiones al servidor

No sé si entendí bien. Si de lo que se trata es de reflejar cambios en un archivo que está en el servidor y que cambia debido a alguna razón cada cierto tiempo, lo que se puede hacer es usar polling, es decir, usar un temporizador (setTimeout/setInterval) que realice peticiones al servidor de manera periódica vía AJAX para detectar algún cambio y, en caso de detectarlo, reflejarlo en la página.
Lo que hay que tener en cuenta es que es un proceso costoso principalmente para servidores como Apache.
  #3 (permalink)  
Antiguo 08/10/2011, 14:55
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años, 7 meses
Puntos: 5
Respuesta: funcion js que necesita peticiones al servidor

yo tengo un problema parecido panino si pudieras dejar un enlace para mas informacion

Última edición por roboty; 08/10/2011 a las 15:16 Razón: ortografia
  #4 (permalink)  
Antiguo 08/10/2011, 15:17
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 11 meses
Puntos: 10
Respuesta: funcion js que necesita peticiones al servidor

Hola Panino5001, perdona por mi mala explicacion, el archivo xml lo creo yo con los datos de mi base de datos y php, este archivo xml lo modifico de forma asincronica segun la opcion que elijan en un select con el evento onchange llamando a la funcion pedir(dato), hasta aqui me funciona bien.
Pero despues creo la funcion MostrarRegistro y MostrarNombres, pretendiendo de mostrar los datos del archivo xml y es esta parte que no me funciona. Si yo el evento onchange aparte de llamar a la funcion Pedir(dato), hago un submit(), si que me funciona el codigo ya que lo que me hace es recargarme la pagina y mostrarme el xml actual, pero esto es lo que no quiero, osea que lo que quiero es que me muestro los datos del xml actual sin recargar pagina. Espero que se me entienda esque estoy ya saturado sobre este codigo que no logro entender. Cualquier ayuda se agradece, saludos.
  #5 (permalink)  
Antiguo 08/10/2011, 15:40
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 6 meses
Puntos: 834
Respuesta: funcion js que necesita peticiones al servidor

Cita:
Iniciado por roboty Ver Mensaje
yo tengo un problema parecido panino si pudieras dejar un enlace para mas informacion
Sí, y la misma IP que azaz
Bueno, habría que ver la estructura de tu xml para ver si lo estás parseando adecuadamente. Te sugiero que uses Firebug y mires en el panel red qué es lo que devuelven tus peticiones.
  #6 (permalink)  
Antiguo 08/10/2011, 15:52
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 11 meses
Puntos: 10
Respuesta: funcion js que necesita peticiones al servidor

Hola panino5001 en la consola web me sale la que la funcion pedir dato me la realiza con exito pero no me muestra el archivo xml osea me muestra esto:

recuperar.php?seccion=1

o la opcion que elija, pero no me muestra el archivo xml, la unica manera que me lo muestre en la consola y me funcione bien el codigo es añadiendo un submit en el evento onchange, espero que me puedas ayudar a entender mi problema.

el xml lo tengo asin:

Código XML:
Ver original
  1. -<datos>
  2.              -<secciones>
  3.                     <seccion>administrador</seccion>
  4.                     <seccion>contable</seccion>
  5.               </secciones>
  6.  
  7. </datos>
  #7 (permalink)  
Antiguo 08/10/2011, 16:06
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 6 meses
Puntos: 834
Respuesta: funcion js que necesita peticiones al servidor

Tal como lo tenés planteado, pasa esto:
Carga la página: se invoca mostrarnombres que llama indefinidamente a mostrarregistro.
Cada vez que cambia el valor del select, se invoca a pedir

Si cada vez que se invoca pedir lo que necesitás es que se invoque mostrarnombres (y por ende a mostrar registro), lo que hay que hacer es:
1)quitar el setInterval, que no sirve para nada (llamar directamente cuando readyState sea igual a 4 a mostrarRegistro).
2)dentro de pedir, también ccuando se cumpla que readyState sea igual a 4, invocar a mostrarnombres.
  #8 (permalink)  
Antiguo 08/10/2011, 16:33
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 11 meses
Puntos: 10
Respuesta: funcion js que necesita peticiones al servidor

Hola Panino5001 cambie las funciones y las puse asin pero no funciono, si me pudieras corregir.

Código Javascript:
Ver original
  1. var procesamiento, xml = null, contador=0;
  2.         function MostrarRegistro() {
  3.                 try {
  4.                         document.getElementById("registro").innerHTML ='<p>'+ xml.getElementsByTagName('seccion')[contador].firstChild.nodeValue+'</p>';
  5.                         contador ++;
  6.                 }
  7.                 catch(e) {
  8.                                document.getElementById("registro").innerHTML = '';
  9.                                contador = 0;
  10.                 }
  11.         }
  12.          
  13.         function MostrarNombres() {
  14.                 var ajax = objetoAjax();
  15.                 ajax.open('get','archivo.xml');
  16.                 ajax.onreadystatechange = function() {
  17.                         if(ajax.readyState == 4){
  18.                              xml=ajax.responseXML;
  19.                                if(xml.getElementsByTagName('seccion').length > 0)
  20.                                                 procesamiento = window.(MostrarRegistro, 4000);
  21.                           }
  22.                 }
  23.                 ajax.send(null);
  24.         }
  25.          
  26.          
  27.         function objetoAjax()   {
  28.                 if (window.XMLHttpRequest)
  29.                     _ajax = new XMLHttpRequest();
  30.                 else
  31.                     if (window.ActiveXObject)
  32.                         _ajax = new ActiveXObject("Microsoft.XMLHTTP");
  33.                     else
  34.                         _ajax = false;
  35.                 return _ajax;
  36.             }
  37.            
  38.      
  39.          
  40.          
  41.         function pedir(dato) {
  42.             Ajax = objetoAjax();
  43.             Ajax.open("get","recuperar.php?seccion=" + dato, true);
  44.             Ajax.onreadystatechange = function() {
  45.               if (Ajax.readyState == 4){
  46.                           document.getElementById('recuperar_datos').innerHTML=Ajax.responseText;
  47.                            window.onload=MostrarNombres();
  48.                 }
  49.              Ajax.send(null);
  50.             }

Última edición por azaz; 08/10/2011 a las 17:10 Razón: correcion
  #9 (permalink)  
Antiguo 09/10/2011, 16:46
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 11 meses
Puntos: 10
Respuesta: funcion js que necesita peticiones al servidor

Sigo sin poder hacer funcionar el codigo como quedria, nadie me puede ayudar.
Saludos.

Yo la funcion pedir(dato), la utilizo para cambiar de forma asincronica el archivo xml, lo que no consiguo es cambiar los datos del la funcion mostrarNombres osea que me abra el archivo xml actualizado, que es el que actualizo con la funcion pedir. No se porque no me funciona cualquier opinion se agradece, saludos.

Última edición por azaz; 10/10/2011 a las 07:59
  #10 (permalink)  
Antiguo 10/10/2011, 08:00
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 11 meses
Puntos: 10
Respuesta: funcion js que necesita peticiones al servidor

No se si esque no invoco bien a la funcion MostrarNombres o si hice algo mal.

Etiquetas: funcion, html, js, peticiones, php, servidor
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 17:07.