Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何在golang中为加载页提供服务,同时等待来自goroutine和channel的数据_Html_Http_Go_Concurrency_Channel - Fatal编程技术网

Html 如何在golang中为加载页提供服务,同时等待来自goroutine和channel的数据

Html 如何在golang中为加载页提供服务,同时等待来自goroutine和channel的数据,html,http,go,concurrency,channel,Html,Http,Go,Concurrency,Channel,我已经编写了goroutines,它对Dropbox进行API调用,以获得通过golang模板在个人网站上显示的临时图像链接。Dropbox有点滑稽,因为我必须首先请求获取所需Dropbox文件夹中的所有图像及其特定路径。然后,我必须使用请求正文中的特定路径再次调用Dropbox,Dropbox将使用临时链接进行响应 所以我有一个go例程,它获取图像路径列表,并通过通道将它们发送到另一个go例程。然后,第二个go例程发出请求并从DB获取临时链接,然后通过另一个通道将临时链接发送到http处理程序

我已经编写了goroutines,它对Dropbox进行API调用,以获得通过golang模板在个人网站上显示的临时图像链接。Dropbox有点滑稽,因为我必须首先请求获取所需Dropbox文件夹中的所有图像及其特定路径。然后,我必须使用请求正文中的特定路径再次调用Dropbox,Dropbox将使用临时链接进行响应

所以我有一个go例程,它获取图像路径列表,并通过通道将它们发送到另一个go例程。然后,第二个go例程发出请求并从DB获取临时链接,然后通过另一个通道将临时链接发送到http处理程序func。由于可能会有数百张图片,因此此过程需要一些时间,并且当后端发出http请求时,浏览器处于空闲状态。我想在golang发出所有http请求时显示一个加载屏幕

我应该注意的是,网页本身是采取的图像,并与他们自动幻灯片。我使用模板将链接传递到html中,并在其上设置“范围”

{{range.}
{{end}
首先,我试图传递模板中链接的最后一个通道,并以这种方式执行它,但页面永远不会呈现。它只是坐在那里等待加载

err:=templates.ExecuteTemplate(w,“index.html”,LinkChannel)
我使用的功能如下:

func主页(w http.ResponseWriter,r*http.Request){
var links[]字符串

l:=模板呈现发生在服务器端。HTTP是基于请求-响应的,这意味着如果您希望客户端在服务器端工作时执行某些操作,则必须发出多个请求。首先,您可以发送带有加载指示器的页面,然后发出进一步的AJAX请求以获取最终URL,然后客户端可以“插入”使用JavaScript代码。或者服务器可以发送现在完全呈现的HTML片段,客户端可以交换DOM中的占位符。你能给我举个例子来说明这一点吗?或者举个例子吗?我不是一个全栈web开发人员。我更像是一个黑客,会拿一堆不同事物的例子,让它们在我的d中工作esired effect。我知道如何设置两个不同的容器,在加载内容时只显示一个容器,然后在加载JS内容后显示另一个容器。但这仍然不能解决我的问题,因为golang在向dropbox发出所有请求后才呈现模板。我的想法是您的服务器只发送回一个只有加载指示器的HTML,它不会等待您的后端完成对dropbox的所有请求。您启动一个新的goroutine来完成这项工作,然后从处理程序返回。客户端可以显示此页面。然后客户端发出进一步的AJAX请求,可能带有您可以发送给我的作业ID在第一个响应中,这些AJAX调用的处理程序可能会等待前一个请求中启动的goroutine完成,然后发送回最终的URL。然后客户端可以处理这些最终的URL。您能否编写一个玩具盒示例以供参考。我明白您的意思,但不确定如何执行。特别是在任何方面AJAX下面是一些使用AJAX调用修改呈现页面的Go示例:。