我正在尝试进行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
答案 0 :(得分:0)
请更准确地描述一下程序,你的应用程序的工作原理是这样的吗?
Js脚本应该向服务器发送请求,并且当收到响应时再次发送请求。
var ajaxFunc = function () {
// handle response and again call
ajaxFunc();
};
当服务器收到请求时,它必须运行一个循环一段时间(可能是20-30秒),并将更新发送到客户端