jquery - javascript 和 revel golang 服务器之间的长轮询

标签 jquery ajax go long-polling revel

我正在尝试进行 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/

相关文章:

javascript - 如何推断复选框值?

javascript - 使用 jQuery 的 SPAN 内容条件

javascript - 如何使用 Ajax 调用将列表传递给 Spring MVC Controller

Jquery $.ajax 异步奇怪行为

pointers - 为什么在取消引用之前必须复制字符串?

javascript - 为什么 Jquery $.ajax 即使调用成功也会在函数调用时触发所有 statusCode

javascript - 第一次点击执行第一个功能,其他点击执行其他功能

jquery - 如何使用AjaxPrefilter?

go - Go 有开箱即用的优先队列吗?

go - 如何在 Go 中的 fmt.Scanf() 之后刷新标准输入?