我正在尝试进行 ajax 调用(使用 jquery)并在响应到达时立即呈现来自服务器的响应。在服务器中,我会在它们准备好后立即发送不同的响应。如果我使用 curl 发出请求,我可以看到它们是如何在屏幕响应中打印的。但是我不能使用 jquery ajax 做类似的事情。
服务器上的代码是这样的:
flusher, ok := app.Response.Out.(http.Flusher)
if !ok {
panic("expected http.ResponseWriter to be an http.Flusher")
}
app.Response.Out.Header().Set("Connection", "Keep-Alive")
app.Response.Out.Header().Set("Transfer-Encoding", "chunked")
app.Response.Out.Header().Set("X-Content-Type-Options", "nosniff")
fmt.Fprintf(app.Response.Out, string(JsonOffers))
flusher.Flush()
这段代码正在调用一个循环。 app.Response.Out
是一个 http.ResponseWriter
。
我做的请求是一个普通的 jquery.ajax 函数:
jQuery.ajax({
url: '/ndc',
type: "POST",
data: ODRequest,
success: function(offers){
console.log( 'Offers', offers )
},
error: function(x,y,z){console.log("ERROR", x);}
})
有了这个,我得到了所有的报价,但只有在处理最后一个响应时,而不是一个接一个。
还有一件事......(我不知道它是否重要)在服务器控制台上我可以在每个请求中看到这个:
server.go:2161: http: multiple response.WriteHeader calls
最佳答案
请更准确地描述过程,您的应用程序以同样的方式工作,像这样?
Js脚本应该向服务器发送请求,当收到响应时再次发送请求。
var ajaxFunc = function () {
// handle response and again call
ajaxFunc();
};
当服务器收到请求后,必须循环运行一定时间(可能是20-30秒),然后向客户端发送更新
关于jquery - javascript 和 revel golang 服务器之间的长轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40507502/