2016-11-09 11 views
0

Я пытаюсь сделать вызов 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 
+0

данных должна быть в паре Key-> значения , Внутри функции ajax переименовать 'data: ODRequest' в' data: {control: 'ODRequest'} 'и обновить необходимую сторону сервера также необходимо обновить. Также добавьте 'dataType: 'json'' в ajax-функцию –

+0

Привет @AniketSahrawat ODRequest - это json-объект. И на сервере я могу получить все поля ... поэтому я думаю, что теперь это не так. Спасибо, в любом случае. –

+0

похоже, что вы хотите «перекачать» данные. Вы можете увидеть отклик печати на отклики, потому что это потоковая передача. Я не уверен в способе ajax, но если это не является сильным требованием, вы можете написать ответы через websocket. – algrebe

ответ

0

Пожалуйста, опишите процедуру более точно, ваше приложение работает так же, как это?

Js-скрипт должен отправить запрос на сервер, а при получении ответа снова отправить запрос.

var ajaxFunc = function() { 
    // handle response and again call 
    ajaxFunc(); 
}; 

Когда сервер получает запрос, он должен запустить цикл в течение определенного времени (может быть 20-30 секунд), а также передавать обновления клиента

+0

Привет @korchemkin. Нет ... мое приложение не работает таким образом. Js должен выполнять только один запрос (когда пользователь нажимает кнопку). Этот запрос поступает на сервер, который должен построить ответ, и этот ответ выполняется тремя кусками. Эти куски (по внутренней обработке) имеют разную задержку между ними, но сервер бросает каждый кусок, как только он будет построен. И в случае, когда вы показываете, кажется, что js рекурсивно вызывает вызов ajax. –

 Смежные вопросы

  • Нет связанных вопросов^_^