Я пытаюсь сделать вызов 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
данных должна быть в паре Key-> значения , Внутри функции ajax переименовать 'data: ODRequest' в' data: {control: 'ODRequest'} 'и обновить необходимую сторону сервера также необходимо обновить. Также добавьте 'dataType: 'json'' в ajax-функцию –
Привет @AniketSahrawat ODRequest - это json-объект. И на сервере я могу получить все поля ... поэтому я думаю, что теперь это не так. Спасибо, в любом случае. –
похоже, что вы хотите «перекачать» данные. Вы можете увидеть отклик печати на отклики, потому что это потоковая передача. Я не уверен в способе ajax, но если это не является сильным требованием, вы можете написать ответы через websocket. – algrebe