Explicacion de codigo

Responder
Avatar de Usuario
jvtecheto
Mensajes: 56
Registered for: 3 years 4 months
Spain

Explicacion de codigo

Mensaje por jvtecheto »

Hola Charly

En el ejemplo Tutor13.prg de TWeb esta esta script de Javascript
supongo que para incluir un script de Javascript siempre tendra que ir dentro de codigo html?

con HTML o
ENDTEXT

Código: Seleccionar todo

function GetId() {
					
						var cId = $('#myid').val() 
						
						$( '#myphone' ).val( '' )
						
						var oParam = new Object()
							oParam[ 'myid'    ] = $('#myid').val()
							
							MsgServer( 'tutor13_srv.prg', oParam, PostGetId )																			
					}
					
					function PostGetId( dat ) {
					
						console.log( dat )

						if ( dat.success ) 
							$( '#myphone' ).val( dat.phone )
						else
							MsgError( dat.error, 'Response from Server' )
					}			
					
						
dices en el video que la funcion MsgServer es de TWeb, entonces...
En la funcion de Javascript GetId(), tu puedes llamar a una funcion de TWeb?, no lo entiendo la verdad, como lo haces ? (breve explicacion ,claro :roll: )
despues en la funcion de TWeb MsgServer pasas un fichero, un Hash y una funcion PostGetId la cual tiene un parametro y tu no le pasas
ninguno, ese parametro no tiene valor del defecto, o yo no lo veo, de donde saca el valor el parametro "dat", tambien de donde saca el tercer
parametro MsgServer , porque parece que la funcion PostGedId no devuelve nada, al menos no veo el return.

Perdona por tantas preguntas.

Saludos.

Jose.
Entusiasta de la programacion y de Harbour, Fivewin en particular.

Avatar de Usuario
charly
Mensajes: 145
Registered for: 3 years 5 months

Mensaje por charly »

Hola Jose,

>> supongo que para incluir un script de Javascript siempre tendra que ir dentro de codigo html?

Si usas TWeb y estas definiendo la pantalla, la manera de insertar codigo nativo (html,css,javascript,...) es usando la etiqueta

HTML <objeto>
ENDTEXT

Dentro de la etiqueta puedes poner el codigo nativo que quieras. TWeb generará la salida al final de todo el bloque, cuando hacemos ENDFORM <objeto> . No se si te refieres ha esto exactamente. En resument, TWeb tiene sus comandos propios y alla donde no llega podemos insertar codigo nativo de lo que sea dentro de las etiquetas HTML <objeto> - ENDTEXT , que es similar por ejemplo a usar un TEXT TO <o> - ENDTEXT.

>> En la funcion de Javascript GetId(), tu puedes llamar a una funcion de TWeb?

Claro, tu al inicio del programa cargas la libreria TWeb y alla tenemos funciones que podremos usar desde Harbour y funciones javascript que podremos usar desde... javascript :D . MsgServer() es una de las muchas funciones q tiene TWeb como MsgInfo(), MsgNotify(),....

>> TWeb MsgServer pasas un fichero, un Hash y una funcion PostGetId la cual tiene un parametro y tu no le pasas ninguno, ...

Este es el concepto callback de javascript, el cual tu puedes pasar un puntero de funcion a una funcion. Seria similar a los codeblocks de harbour. Realmente se pasa una referencia a la funcion. En resumen desde la funcion que recibe ese puntero de funcion, podra ejecutarla, EVALuarla. La diferencia con harbbour y los evals es que en los bloques de codigo indicas los parámetros que vas a usar --> {|a,b| MiFuncion( a,b,c) } , pero en javascript cambia un poco. Se indica que evalua pero no los parámetros.

Cuando yo indico que se va ejecutar PostGetId, defino una función que se que recibira en este caso un parametro que sera un hash que lo procesaré. Si te fijas en el codigo de la parte del servidor (tutor13_srv.prg) , el programa devuelve un hash:

?? hb_jsonEncode( { 'success' => lSuccess, 'phone' => cPhone } )

La funcion MsgServer() se encarga de ejecutar tutor13_srv.prg y espera (asincronamente) a que el servidor ejecute ese prg y le devuelva una contestación. En este caso devuelve este hash. Y que hace MsgServer() ? Cuando recibe la contestacion EVALua la funcion que le hemos pasado como un puntero ( PostGetId ) y le pasará toda la respuesta que recibe del servidor, que en este caso es un hash con dos keys: success y phone, cada uno con su valor.

En la definicion de PostGetId( dat ) ya me defino un parametro que se que voy a recibir, porque asi lo he definido en el servidor. Luego ya desde esta funcion trato la variable dat....

Es un cambio de manera de pensar pero esto es javascript puro y duro. En este debemos pensar: Estoy en el cliente (navegador) y necesito hacer una peticion al servidor. Pues con MsgServer() le pasas que programa quieres ejecutar, le paso unos parametros y un PUNTERO DE FUNCION, que msgserver ejecutara cuando reciba una contestacion del server.

Esta es la tecnica que se usa en javascript

>> parece que la funcion PostGedId no devuelve nada, al menos no veo el return.

En este caso PostGetId() no devuelve nada porque lo que hace es ejecutar unas acciones y listos

Código: Seleccionar todo

function PostGetId( dat ) {

	if ( dat.success ) 
	   $( '#myphone' ).val( dat.phone )
	else
	   MsgError( dat.error, 'Response from Server' )
}


C.
Salutacions, saludos, regards.
Charly

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

https://httpd2.blogspot.com/
https://forum.modharbour.app

Avatar de Usuario
jvtecheto
Mensajes: 56
Registered for: 3 years 4 months
Spain

Mensaje por jvtecheto »

Charly

muchisimas gracias. Esto es otro mundo. :cry:

como decimos por aqui. "Poquet a Poquet." (Poco a poco)

Saludos.

Jose.
Entusiasta de la programacion y de Harbour, Fivewin en particular.

Avatar de Usuario
charly
Mensajes: 145
Registered for: 3 years 5 months

Mensaje por charly »

Jose,

En resumen tu has de asimilar ahora --> MsgServer( <Tu_Prg>, <Hash de Parametros que pasas al prg>, <nombre la funcion javascript que se ejecutara cuando el server conteste> )

El nombre de la funcion, es solo el nombre, sin parentesis.

Si usamos jquery para simplificar codigo, una llamada de tipo ajax se podria plasmar asi

Código: Seleccionar todo

$.ajax({
    // la URL para la petición
    url : 'post.php',

    // la información a enviar
    // (también es posible utilizar una cadena de datos)
    data : { id : 123 },

    // especifica si será una petición POST o GET
    type : 'GET',

    // el tipo de información que se espera de respuesta
    dataType : 'json',

    // código a ejecutar si la petición es satisfactoria;
    // la respuesta es pasada como argumento a la función
    success : function(json) {
        $('<h1/>').text(json.title).appendTo('body');
        $('<div class="content"/>')
            .html(json.html).appendTo('body');
    },

    // código a ejecutar si la petición falla;
    // son pasados como argumentos a la función
    // el objeto de la petición en crudo y código de estatus de la petición
    error : function(xhr, status) {
        alert('Disculpe, existió un problema');
    },

    // código a ejecutar sin importar si la petición falló o no
    complete : function(xhr, status) {
        alert('Petición realizada');
    }
});
Esto es code javascript puro y duro. Como puedes observar un MsgServer() es sencillo en comparacion.
Salutacions, saludos, regards.
Charly

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

https://httpd2.blogspot.com/
https://forum.modharbour.app

Responder