Comunidad de diseño web y desarrollo en internet online

Problema Ajax + Javascript

Citar            
MensajeEscrito el 27 Oct 2011 01:47 pm
Hola a todos, no sé si este es el foro indicado para este tema, pero no he encontrado uno mejor. Les cuento mi problema.
Desde javascript llamo a una función AJAX que me devuelve "True" o "False" dependiendo de la consulta a BBDD
A continuación les dejo el código y luego les cuento el problema:

Código Javascript :

function ajaxOnTickTackTrue() {
  alert('true');
}
function ajaxOnTickTackFalse() {
  alert('false');
}
function Tick() {
        clearTimeout(timerID);
        timerID = setTimeout("Tack()", 30000);
        ajaxFunction('http://localhost/services/Tick.ashx?id=1', "", ajaxOnTickTackTrue, ajaxOnTickTackFalse);
}
function Tack() {
        clearTimeout(timerID);
        timerID = setTimeout("Tick()", 30000);
        ajaxFunction('http://localhost/services/Tack.ashx?id=2', "", ajaxOnTickTackTrue, ajaxOnTickTackFalse);
}
function ajaxFunction(url, params, ret_fun_ok, ret_fun_nook)
{
   var xmlHttp = createXMLHttp(); 
   xmlHttp.open("POST", url, true);
   //Send the proper header information along with the request
   xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   xmlHttp.setRequestHeader("Content-length", params.length);
   xmlHttp.setRequestHeader("Connection", "close");
   xmlHttp.send(params);
   xmlHttp.onreadystatechange = function ext2(){
      if ( xmlHttp.readyState == 4 ) {
         if ( xmlHttp.status == 200 )
            ret_fun_ok(xmlHttp.responseText);
         else
            ret_fun_nook();
      }
   };
}
function createXMLHttp() 
{
    if (typeof XMLHttpRequest != 'undefined')
   return new XMLHttpRequest();
    else if (window.ActiveXObject) {
   var avers = ["Microsoft.XmlHttp", "MSXML2.XmlHttp","MSXML2.XmlHttp.3.0", "MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.5.0"];
   for (var i = avers.length -1; i >= 0; i--) {
      try {
      httpObj = new ActiveXObject(avers[i]);
      return httpObj;
      } catch(e) {}
   }
    }
    throw new Error('XMLHttp (AJAX) not supported');
}

El problema es que las llamadas a las páginas Tick.ashx y Tack.ashx siempre devuelven "True", pero me entra a la funcion "ajaxOnTickTackFalse". Alguien sabe el porque? me pueden echar una mano?

Muchas gracias de antemano

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Oct 2011 01:57 pm
Pues por lo que se ve en el código, que muestre el alert(true) o alert(false) no depende de lo que devuelvan esas páginas, sino de si las llamadas al servidor fueron exitosas (estado 200) o no (estado distinto de 200).

En ningún momento estás evaluando qué devuelven esas páginas, sino si las páginas existen o no.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 Oct 2011 02:03 pm
Hola DriverOp, por lo que me dices las páginas "http://localhost/services/Tick.ashx?id=1" y "http://localhost/services/Tack.ashx?id=2" no estarían bien linkadas o no se puede acceder a ellas. Pero usando un Sniffer, veo que las llamadas a dichas páginas se producen y por eso he dicho que siempre devuelven "True".
De todas formas, como podría solucionar el problema?

Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Oct 2011 02:06 pm
Decir también que el Sniffer devuelve código 200 después de cada llamada a cada una de las páginas.

Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Oct 2011 04:36 pm
Ya.
Se nos ha pasado por alto a los dos un pequeño pero fundamental detalle: los if están mal cerrados. Bueno, no es que estén mal, sucede que el ámbito de cada no es el que quieres.

Prueba con estos cambios en la parte relevante:

Código Javascript :

xmlHttp.onreadystatechange = function ext2(){ 
      if ( xmlHttp.readyState == 4 ) { 
         if ( xmlHttp.status == 200 ) {
            ret_fun_ok(xmlHttp.responseText); 
      }
         else {
            ret_fun_nook(); 
      }
      } 
   }; 

Como no tengo todo el tinglado que estás usando tú, no puedo probarlo objetivamente.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 Oct 2011 08:55 pm
Agrega un ir al onreadystate...

If ( xmlHttp.responseText != null)
Ret_fun_ok...

Blas blah bush...


Así como lo tienes solo te devuelve true por cada vez que se conecte el ajax al servidor... No por la respuesta que reciba de las páginas esas...

Por MmO

1078 de clabLevel

4 tutoriales

Genero:Masculino  

Marketing interactivo y gestión de proyecto de software.

safari

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.