FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour TIP:Usando AJAX con Harbour
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
TIP:Usando AJAX con Harbour
Posted: Wed Jul 16, 2008 09:06 AM

Bueno, el TIP de dia, como usar AJAX y Harbour y no morir en el intento.

Introdución.
Tengo una aplicación que cada X tiempo realiza una peticion a un PHP para informar de que la aplicación esta funcionando.

Herramientas a usar.
Objeto a usar MSXML2.XMLHTTP, vamos esto es el AJAX. ( A grandes rasgos )

Function CREATEHTTP()
Local oHttp

try
  oHttp := CreateObject( "MSXML2.XMLHTTP.6.0" )  // Version.

catch e
try
oHttp := CreateObject( "MSXML2.XMLHTTP.4.0" ) // Version.
catch e
try
oHttp := CreateObject( "MSXML2.XMLHTTP" ) // Version.
catch e
? "Error en el creacion de MSXML2.XMLHTTP" + CRLF )
end
end
end

RETURN oHttp

Bien , realmente todo esto lo tengo montado como una clase, pero... os lo dejo como función que será más didactico.

Ahora vamos a enviar los datos a un PHP cualquier, y ademas, lo haremos asincronico , para poder controlar un timerout propio.
Os aseguro que esto es lo que usan la gente de PHP, yo me he quedado alucinado de lo mal, según mis gustos, que esta montado esto, empezando CON LA MARDITA CACHE DE LAS NARICES, que ahora veremos que hacer para no tener problemas.

/***********/
// Informe de activada, estoy vivo.
/
*************/
Function SendPresencia( )
Local oHttp, e
Local nTime := 0
Local lAsincronico := .T.
Local cUrl := "http://www.pruyeb.es/test/bin/"+;
"Presencia.php?proceso=FIVEWIN&"+;
"app=PEPE" +;
"&time="+Time()

   if ( oHttp := ::CreateHttp() ) != NIL
      SysRefresh()
      try
          if Empty( cLog )  // Si no hay log
             oHttp:Open( "GET", cUrl, lAsincronico )
             oHttp:SetRequestHeader( "Content-Type","application/x-www-form-urlencoded" )
          oHttp:Send() // Envia el HTML

          nTime := Seconds()

           // Control del Asincronico y un tiempo de 1.5 seg.
          while oHttp:ReadyState != 4
                if ABS( Seconds() - nTime ) >= 1.5
                   ?"TimeOut." 
                  EXIT
                endif
                SysRefresh()
          enddo
          if oHttp:ReadyState = 4
             ? oHttp:responseText + CRLF
          endif
      catch e
           ?"Error en el envio de Presencia/Log:" + CRLF + e:description )
      end
   endif

   oHttp := NIL

RETURN NIL

Bien, aqui teneis una manera de llamar a un PHP para enviar datos, mucho mas efectivo que usar el ActiveX del Navegador, aunque tengo mis dudas ;-)

La cuestion esta en para a la URL un paramentro 'inventado', como puede ser el Time(), ¿ Porque de esto ? Muy bien.
Porque la primera vez , se envia correctamente, pero si la URL es la misma, entonces el tio TIRA DE LA CACHE, y te devuelve lo que devolvio la ultima vez, por lo tanto REALMENTE no esta llamando al PHP.

Asi es como los señores del PHP lo hacen para evitar que lo coja de la cache.
Si, he leido un poco sobre ello, y cosas como estas, pues no nos sirven;

http://www.w3.org/Protocols/rfc2616/rfc ... l#sec14.32

Además, como tampoco podemos controlar el TimerOut si lo hacemos sincronico, por las pruebas que he realizado tarda unos 20 segundos antes de darnos el control a la aplicacion.

Haciendolo asincronico, podemos controlar el timerout por nosotros mismos, y la aplicacion no se nos 'congelará'.

En fin, me a costado un montón localizar el porque no estaba informando las aplicaciones, y todo era por la mardita CACHE..

Que os aproveche!

Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
TIP:Usando AJAX con Harbour
Posted: Wed Jul 16, 2008 09:42 AM

Rafa,

Enhorabuena y muchas gracias por compartirlo con todos nosotros :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 15
Joined: Wed May 03, 2006 02:05 PM
Re: TIP:Usando AJAX con Harbour
Posted: Sat Aug 06, 2011 04:23 PM

Estimado Rafa

Muy bueno el ejemplo de hecho lo uso para descargar páginas y extraer algunos contenidos. oHttp:responseText
Dime si quisiera descargar una imagen y mostrarlo en mis programas FW como sería.

Saludos y felicitaciones.

Francisco Nuñez

Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: TIP:Usando AJAX con Harbour
Posted: Sun Aug 07, 2011 08:33 AM

Rafa,

Muy bueno el aporte como siempre :-). El tip del time tambien es importantepara cuando estas en fase de diseño de html, cada vez q ejecutas desde el navegador un php es importante llamarlo añadiendo un parametro extra oara forzar su nueva ejecucion sino lo tienes claro. Entiendo perfectamente lo q pasaste jejeje

Gracies.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix

Continue the discussion