TIP:Usando AJAX con Harbour

TIP:Usando AJAX con Harbour

Postby thefull » Wed Jul 16, 2008 9: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__)
User avatar
thefull
 
Posts: 730
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby Antonio Linares » Wed Jul 16, 2008 9:42 am

Rafa,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41440
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: TIP:Usando AJAX con Harbour

Postby Francisco » Sat Aug 06, 2011 4: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
Francisco
 
Posts: 15
Joined: Wed May 03, 2006 2:05 pm

Re: TIP:Usando AJAX con Harbour

Postby Carles » Sun Aug 07, 2011 8: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
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1114
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 81 guests