2016-11-09 8 views
0

jqueryを使用してajax呼び出しを行い、到着するとすぐにサーバーからの応答をレンダリングしようとしています。サーバーでは、準備ができ次第、さまざまな応答を送信します。私が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.Outhttp.ResponseWriterです。ない一つ一つを、私はすべてのオファーを取得しますが、最後の応答が処理された場合にのみ、およびこれにより

jQuery.ajax({ 
    url: '/ndc', 
    type: "POST", 
    data: ODRequest, 
    success: function(offers){ 
     console.log('Offers', offers) 
    }, 
    error: function(x,y,z){console.log("ERROR", x);} 
    }) 

私は要求は、通常のjquery.ajax機能です。私は各要求で、これを見ることができます

一つのことより...(それは重要なことができれば、私は知らない)サーバーのコンソール上:

server.go:2161: http: multiple response.WriteHeader calls 
+0

>値のペア。内部のajax関数 'data:ODRequest'を' data:{control: 'ODRequest'} 'にリネームし、必要なサーバ側を更新する必要があります。また、 'dataType: 'json''をajax関数に追加してください。 –

+0

こんにちは@AniketSahrawat ODRequestはjsonオブジェクトです。そしてサーバーでは、私はすべてのフィールドを取得することができます...だから私はそれが今のものではないと思う。とにかくありがとう。 –

+0

あなたはデータを 'stream 'したいと思っています。ストリーミングされているので、レスポンスでカールのプリントを見ることができます。私はアヤックスの方法についてはわかりませんが、それが強力な要件でない場合は、websocket経由でレスポンスを書くことができます。 – algrebe

答えて

0

してくださいは、より正確に手順を説明し、あなたのアプリケーションはこれと同じように動作しますか?

Jsスクリプトは、サーバーに要求を送信する必要があります。応答が受信されると、再度要求が送信されます。データはキー - でなければなりません

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

サーバーが要求を受信すると、それは(20〜30秒である)一定時間ループを実行し、クライアントに更新を送信しなければならない

+0

こんにちは@korchemkin。いいえ...私のアプリはこのように動作しません。 jsは1回のリクエスト(ユーザーがボタンをクリックしたとき)のみを実行する必要があります。この要求は、応答を構築する必要があるサーバーに到着し、この応答は3つのチャンクによって行われます。このチャンク(内部処理による)は、それらの間で異なる遅延を持ちますが、サーバーは構築されるとすぐに各チャンクをスローします。そして、あなたが公開している場合は、jsがajaxを再帰的に呼び出すように見えます。 –

関連する問題