我试图做一个ajax调用(使用jquery)并且在服务器到达时立即呈现响应。在服务器中,我准备好后立即发送不同的响应。如果我使用curl发出请求,我可以看到他们如何通过响应在屏幕响应中进行打印。但我不能用jQuery ajax做类似的事情。javascript和revel之间的长时间轮询golang服务器
在服务器上的代码是这样的:
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
数据必须在键 - >值对。在ajax函数中,将'data:ODRequest'重命名为'data:{control:'ODRequest'}',并且必须更新必要的服务器端。还要添加'dataType:'json''到ajax函数 –
Hi @AniketSahrawat ODRequest是一个json对象。而在服务器上,我可以得到所有的字段......所以我认为现在不是这样。不管怎么说,还是要谢谢你。 –
它看起来像你想'流'的数据..你可以看到卷曲打印响应的响应,因为它是流媒体。我不确定ajax的方式,但如果它不是一个强有力的要求,你可以通过websocket写回应。 – algrebe