我正在帮助一个开源项目。这是一个运行在包含Raspberry Pi的设备上的小型Go网络服务器。我希望能够让用户单击html屏幕上的一个按钮,该按钮在Go中调用一个例程,该例程返回2个值,一个布尔值和一个字符串。
我们想要做的是查看树莓派上的哪些网络接口,例如局域网连接建立了吗?
为此,我确实需要从每个界面ping一个站点。这三个接口(局域网,WiFi和3G)中的每个接口都需要花费几秒钟。
我可以在请求页面时执行此操作,并在页面加载时填写html模板,但这意味着可能要等待10到15秒才能加载页面,因此好像有些东西坏了。
因此,我希望能够列出页面上的3个界面中的每个界面,并让用户单击“测试”,然后在底层Go Web服务器中调用例程。
然后,我需要能够在每个界面的几个文本区域中显示通话结果。
我尝试过的事情:
我尝试使用net / html包中的funcmap注册一个Go函数(在本例中为IsLANConnectionUp),然后从JavaScript函数的html模板中调用它,如下所示:
<button onclick = "getLANStatus()" class="btn btn-primary">Test</button>
<script>
function getLANStatus() {
var status = document.getElementById('status');
{{ if IsLANConnectionUp }}
status.innerHTML = "Lan is up!"
{{ else }}
status.innerHTML = "Lan is down!"
{{ end }}
}
</script>
但是将模板代码包含在javascript代码中似乎不起作用。另外,我想从ping命令输出文本(我的Go函数getLANStatus和我不知道如何从函数调用中提取该数据。文档说只能返回一个值。
在StackOverflow上搜索,我看到以下内容:calling Golang functions from within javascript code
$.ajax({
url: "http://www.example.com/signup",
data: {username: "whatever"} //If the request needs any data
}).done(function (data) {
// Do whatever with returned data
});
但是它说的是“ //对返回的数据做任何事情”之类的东西,我对Web编程还是陌生的,所以不知道如何使用该代码。如果要走的路,有人可以在这方面做些扩展吗?
任何帮助将不胜感激。
答案 0 :(得分:1)
所以在这里结合不同的概念。
渲染:在对您的html的初始请求中,该请求生成了DropDownList
按钮。您的Go服务器会将HTML渲染1次,并将其返回到浏览器。除非您进行连接以更改网页,否则它不会动态重新请求。
客户端:因此,当有人单击您的按钮时,功能Test
将被运行。您将希望该功能执行一些操作
通过ajax,通过api与go服务器通信,该api将以json对象的形式返回连接状态。像
{ “ 3g”:“ up”, “ lan”:“下”, “ wifi”:“上” }
其次,在ajax的getLANStatus
部分中,您将操作DOM中的某些内容以传达接口的状态。您可以通过找到元素,然后将文本更改为对象返回的内容来做到这一点。
作为简单的第一步,您可以在函数中done
像这样
alert
然后,如果您要求在Chrome控制台打开的情况下,您将能够直接使用返回的$.ajax({
url: "http://YOUR_GO_SERVER_IP_OR_DNS:PORT/interfaces_status.json"
}).done(function (data) {
alert(data);
console.log(data);
debugger;
});
进行播放,从而知道它的所有响应。