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 .