type script referenciar llamar insertar externo desde como codigo cargar archivo jquery go webserver

jquery - script - Incluir archivo js en la plantilla Go



llamar javascript desde html (1)

Empecé a aprender Go recientemente. Obtuve una muestra como aplicación web. Yo tengo:

/* tick-tock.go */ package main import ( "fmt" "io/ioutil" "log" "net/http" ) // Content for the main html page.. var page = `<html> <head> <script type="text/javascript" src="http://localhost:8081/jquery.min.js"> </script> <style> div { font-family: "Times New Roman", Georgia, Serif; font-size: 1em; width: 13.3em; padding: 8px 8px; border: 2px solid #2B1B17; color: #2B1B17; text-shadow: 1px 1px #E5E4E2; background: #FFFFFF; } </style> </head> <body> <h2 align=center>Go Timer </h2> <div id="output" style="width: 30%; height: 63%; overflow-y: scroll; float:left;"></div> <div id="v1" style="width: 50%; height: 30%; overflow-y: scroll; float:left;"></div> <div id="v2" style="width: 50%; height: 30%; overflow-y: scroll; float:left;"></div> <input id="sett" type="submit" name="sett" value="Settings" onclick="changeUrl()"> <script type="text/javascript"> var myDelay; $(document).ready(function () { $("#output").append("Waiting for system time.."); myDelay = setInterval("delayedPost()", 1000); }); function delayedPost() { $.post("http://localhost:9999/dev", "", function(data, status) { //$("#output").empty(); $("#output").prepend(data); }); $.post("http://localhost:9999/v1", "", function(data, status) { //$("#output").empty(); $("#v1").prepend(data); }); $.post("http://localhost:9999/v2", "", function(data, status) { //$("#output").empty(); $("#v2").prepend(data); }); } function delayedPost1() { $.post("http://localhost:9999/dev", "", function(data, status) { $("#output").prepend(data); }); $.post("http://localhost:9999/v1", "", function(data, status) { $("#v1").prepend(data); }); $.post("http://localhost:9999/v3", "", function(data, status) { $("#v2").prepend(data); }); } function changeUrl() { alert(''salom''); clearInterval(myDelay); } </script> </body> </html>` // handler for the main page. func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, page) } // handler to cater AJAX requests func handlerDevs(w http.ResponseWriter, r *http.Request) { //fmt.Fprint(w, time.Now().Format("Mon, 02 Jan 2006 15:04:05 MST")) fmt.Fprint(w, "<font color=red>Dev1<br></font>") } func handlerV1(w http.ResponseWriter, r *http.Request) { //fmt.Fprint(w, time.Now().Format("Mon, 02 Jan 2006 15:04:05 MST")) fmt.Fprint(w, "<font color=blue>Vertical1<br></font>") } func handlerV2(w http.ResponseWriter, r *http.Request) { //fmt.Fprint(w, time.Now().Format("Mon, 02 Jan 2006 15:04:05 MST")) fmt.Fprint(w, "<font color=green>Vertical2<br></font>") } func main() { http.HandleFunc("/", handler) http.HandleFunc("/dev", handlerDevs) http.HandleFunc("/v1", handlerV1) http.HandleFunc("/v2", handlerV2) log.Fatal(http.ListenAndServe(":9999", nil)) http.HandleFunc("/jquery.min.js", SendJqueryJs) panic(http.ListenAndServe(":8081", nil)) } func SendJqueryJs(w http.ResponseWriter, r *http.Request) { data, err := ioutil.ReadFile("jquery.min.js") if err != nil { http.Error(w, "Couldn''t read file", http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/javascript") w.Write(data) }

No pude cargar jquery.min.js local. Cuando escribí src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" se cargó. ¿Cómo puedo cargar el archivo js local? No soy bueno codificando en Go y no escribí el código completo. Así que por favor trata de explicarlo muy simple. ¡Gracias por adelantado!


Necesita un Handler o un HandlerFunc que enviará el contenido del archivo ( jquery.min.js ) al navegador web cuando se le solicite.

Tienes 3 opciones:

Haciéndolo manualmente

Esta es la solución más compleja. Parece que en su función de controlador lee el contenido del archivo, establece el tipo de contenido de respuesta adecuado ( application/javascript ) y envía el contenido (que es un []byte ) a la respuesta.

Cosas a tener en cuenta: al leer el archivo, debe especificar una ruta absoluta. Si especifica una ruta relativa, asegúrese de que el archivo esté en la carpeta actual (directorio de trabajo) desde donde inicia su aplicación.

Ejemplo:

func SendJqueryJs(w http.ResponseWriter, r *http.Request) { data, err := ioutil.ReadFile("jquery.min.js") if err != nil { http.Error(w, "Couldn''t read file", http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/javascript; charset=utf-8") w.Write(data) } func main() { http.HandleFunc("/jquery.min.js", SendJqueryJs) panic(http.ListenAndServe(":8081", nil)) }

El ejemplo anterior es capaz de servir solo 1 archivo: jquery.min.js para la solicitud:

http://localhost:8081/jquery.min.js

Utilizando http.ServeFile()

Esto es mucho más fácil: la función http.ServeFile() es capaz de enviar el contenido de un archivo a la respuesta especificada. Todavía necesita crear una función o controlador para usarlo, pero hace el resto por usted:

func SendJqueryJs(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "jquery.min.js") }

Utilizando http.FileServer()

Si necesita servir varios archivos estáticos, aquí es donde la función FileServer() es útil, lo que le devuelve un Handler que sirve automáticamente los archivos de su sistema de archivos local que son descendientes de la carpeta raíz que especifique.

Esta solución es mucho más flexible: puede enviar muchos archivos de múltiples tipos, detecta y establece el tipo de contenido automáticamente. El controlador también es capaz de representar páginas HTML para enumerar el contenido del directorio con enlaces a los archivos y a las carpetas principales / secundarias.

Ejemplo:

http.Handle("/tmpfiles/", http.StripPrefix("/tmpfiles/", http.FileServer(http.Dir("/tmp"))))

Esto registrará un Handler en la URL /tmpfiles/ que sirve los archivos encontrados en su sistema de archivos local en la carpeta /tmp . Entonces, por ejemplo, el siguiente enlace <script> :

<script type="text/javascript" src="/tmpfiles/jquery.min.js">

/tmp/jsquery.min.js archivo /tmp/jsquery.min.js del servidor.

Mira esta respuesta que detalla cómo usar / encender un servidor de archivos estático .