Foros Néfele 4 Harbour › Foros › Dudas › lanzar Ajax al seleccionar fichero con WFileOpenDlg
- Este debate tiene 7 respuestas, 3 mensajes y ha sido actualizado por última vez el 4 años, 2 meses por quim. This post has been viewed 702 times
-
AutorEntradas
-
-
24-09-2020 a las 12:28 #754XeviParticipante
Resulta que siguiendo el sample de Nefele, estoy probando de lanzar ajax, como el ejemplo del ComboBox y veo que no se lanza.
12345678910With Object WFileOpenDlg():New(:WO):cName := "fitxerxls":cTitle := "Fitxer Excel per crear ordre SEPA":cHelpOk := "Ok":cHelp := "Es necessita d'un fitxer en format Xls o Xlsx":cAjaxBevel := "bvHoraVisita":lAjaxWaitON := .T.:cOnChange := "actualizahorario":Create()End WithEstoy haciendo algo mal ???
Un Saludo,
Xevi -
24-09-2020 a las 20:15 #758quimParticipante
Xevi
Creo que para que el CGI te haga caso, tienes que anteponer el carácter # al nombre de la funcion CGI, en tu caso así :
'#actualizahorario'
Saludos
Quim
-
24-09-2020 a las 21:27 #760XeviParticipante
Quim, no... no es por eso.
al menos con o sin # hace lo mismo, no lanza el evento AjaxEl ejemplo nefele_samples, el control WComboBox
123456789101112131415161718// Inatanciamos el wComboBox que va ha realizar la llamada por AJAX a nuestro CGIwith OBJECT WComboBox():New(:WO):cId := "diavisita":aItems := {{1,"Lunes"},{2,"Martes"},{3,"Miercoles"},{4,"Jueves"},{5,"Viernes"},{6,"Sabado"},{7,"Domingo"}}:cText := "Seleccione el día de visita":cIcon := "event_available":cTitle := "Día de visita":cHelp := "Este es el día que prefiere que le hagamos la visita periodica"// Aquí comienza la "magia" con Ajax:cAjaxBevel := "bvHoraVisita" // Le indicamos que la respuesta al evento no va ha ser una página nueva// sino que hay que "incrustarla" en el wBevel bvHoraVisita:lAjaxWaitON := .T. // Podemos indicarle que mientras se procesa la llamda por Ajax en el wBevel que va// recibir el resultado presente un indicador de actividad al estilo Materialize:cOnChange := "actualizahorario" // Este es el Method de nuestro CGI que procesara la llamada por AJAX// y nos devolvera el resultado// Creamos el wComboBox:Create()end withy la magia "fluye"... no con el caso de un WFileOpenDlg
12345678910With Object WFileOpenDlg():New(:WO):cName := "fichero":cTitle := "Fitxer Excel per crear ordre SEPA":cHelpOk := "Ok":cHelp := "Es necessita d'un fitxer en format Xls o Xlsx":cAjaxBevel := "bvHoraVisita":lAjaxWaitON := .T.:cOnChange := "actualizahorario":Create()End WithGracias por vuestro tiempo.
Un Saludo,
Xevi.
-
25-09-2020 a las 09:20 #776quimParticipante
Xevi
No entiendo que quieras lanzar un submit por Ajax cuando lo puedes hacer perfectamente con un formulario
123456789101112131415161718192021222324252627PROCEDURE UploadFiles()WITH OBJECT TWebPage():New():lFooter := .F.:AddHTML( "<h3>Subir archivos</h3>" )WITH OBJECT WForm():New(:WO):cFunction := "actualizahorario":aParams := {{"control","1"}}WITH OBJECT WFileOpenDlg():New(:WO):cName := "fichero":cTitle := "Seleccione uno o varios archivos para adjuntar":lMultiple := .T.:Create()ENDWITH OBJECT WButton():New(:WO):lSubmit := .T.:cText := "Subir":Create()END:Create()ENDoCGI:SendPageNoCache( :Create() )ENDRETURNSaludos
- Esta respuesta fue modificada 4 años, 2 meses por quim.
-
-
25-09-2020 a las 00:10 #767Alfredo SanzSuperadministrador
Hay controles en los que aún no están implementados todos los eventos.
Y en el caso de ajax, este es especialmente complejo, porque tendíamos que enviar no solo el nombre del fichero, sino también el contenido, con el aumento de tráfico que eso genera.
Tenemos ya resuelto el problema del atributo accept del <input> y en la nueva versión que publicaremos en un par de días ya funciona
WITH OBJECT WFileOpenDlg():New(:WO)
:cName := "fichero"
:cAccept := "application/vnd.ms-excel"aunque lo estamos mejorando, porque si bien las líneas anteriores te mostrarán solo archivos con la extensión de excel, las especificaciones de html te permiten hacer un *.* y seleccionar cualquier otro tipo de fichero.
Si revisas https://fractality.ddns.net:44444/cgi-bin/nefele_samples.exe?form3 verás que solo te muestra ficheros xls y xlsx , pero además, solo te permite seleccionar ficheros con esas extensiones
-
25-09-2020 a las 09:35 #779XeviParticipante
Quim,
Si, si lo veo con un submit de un Form, lo que pretendia es mostrar unos datos, que se rellenen unos campos en función del fichero seleccionado y procesar la información.
No hay problema de hacer primero un Form, donde solicito el fichero, y una vez subido pasar a otra pagina donde mostrar esos datos y hacel lo que tenga que hacer.
Solo, por curiosidad, pues digo, igual puedo lanzar el ajax y lo dejo mas como tengo hecho en la aplicación escritorio, nada más.Un Saludo,
Xevi.
-
25-09-2020 a las 11:27 #785quimParticipante
Xevi
Siempre nos queda poder programar funcionalidades personalizadas
Néfele te permite 'meter el cuchillo' y extender sin límite 😉Fíjate en el siguiente código :
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051static function myScript()local cScript := ""TEXT INTO cScriptvar form = document.querySelector('#uploads'); // == WForm():cId// Interceptando accion por defecto del formularioform.onsubmit = function(e) {// mostrar popup, capturar datos, etcprompt("Please enter your name", "Harry Potter");// parar propagación del evento originale.preventDefault();// devolver true / false si dejamos que el formulario siga// con la accion programada originalreturn false;}ENDTEXTreturn cScript//------------------------------------------------------------------------------WITH OBJECT TWebPage():New()AAdd( :aScript, myScript() )WITH OBJECT WForm():New(:WO):cId := "uploads":cFunction := "myfunction"WITH OBJECT WFileOpenDlg():New(:WO):cName := "files":cTitle := "Seleccione uno o varios archivos para adjuntar":lMultiple := .T.:Create()ENDWITH OBJECT WButton():New(:WO):lSubmit := .T.:cText := "Subir":Create()END:Create()ENDoCGI:SendPageNoCache( :Create() )END
-
-
25-09-2020 a las 11:05 #782Alfredo SanzSuperadministrador
Xevi.
Ten en cuenta que la propia seguridad de los navegadores web hay muchas cosas que nos va a dejar hacer tal y como lo hacemos en el escritorio para evitar que el navegador tenga acceso a determinados elementos del ordenador cliente
-
-
AutorEntradas
- Debes estar registrado para responder a este debate.