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
. 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.