【发布时间】:2016-11-09 12:52:35
【问题描述】:
我正在尝试进行 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()
这段代码的 sn-p 正在调用一个循环。 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
【问题讨论】:
-
数据必须在 key->value 对中。在 ajax 函数内部将
data: ODRequest重命名为data: { control: 'ODRequest'}并更新必要的服务器端也必须更新。还将dataType: 'json'添加到ajax函数 -
嗨@AniketSahrawat ODRequest 是一个json对象。在服务器中,我可以获得所有字段......所以我认为现在不是这样。无论如何,谢谢。
-
看起来你想
stream数据..你可以看到卷曲打印响应,因为它是流式的。我不确定 ajax 方式,但如果不是严格要求,您可以通过 websocket 编写响应。
标签: jquery ajax go long-polling revel