2016-05-20 9 views
1

私はいくつかのサーバーからjavascript ajaxリクエストを作成でき、しばらくしてからレスポンスを受け取るか、タイムアウトエラーが発生することを知っています。Javascript ajaxレスポンスを待たずにコールバックを返す

このような状況を考えてみましょう。リクエストを受け取った後、いつでもサーバがレスポンスを送信するか(あるいは、リクエストがサーバーからクライアントに別のリクエストとなる)その後、応答とともにjavascriptのCB関数を呼び出します。

私は主にすべての最新のブラウザをサポートする方法について考えています。可能であれば、jQuery以外の第三者のプラグインに頼らないようにしてください。

+1

ですから、サーバがクライアントに信号を送りたいですサーバーの言葉で?または、クライアントがポスト/ゲットを送信した後は、 – Glubus

+1

Webソケットを見てみると、Webソケットプロトコルにより、クライアント - >サーバー、サーバー - >クライアントのいずれかの方向にデータをストリームできるようになります。ソケットと他の利用可能な技術を使ってクライアントとサーバーの間のリアルタイム通信を可能にするライブラリhttp://socket.io/を見てください。 – dj10dj100

+2

サーバーで処理を開始し、要求がキューに入っているという応答をユーザーに返すことができます。サーバーはしばらくして要求を完了し、結果をクライアントにプッシュします。これはプッシュメカニズムであり、WebSocket、古いポーリング(旧式のブラウザ)を使用して実現することができます。また、socket.io –

答えて

0

Ajaxの主な特長は、デフォルトでは非同期であり、プログラムは応答を待たずに引き続き実行されることです。あなたの質問を誤解しない限り、それはあなたが必要とするものです。

jqueryを使用する場合、サーバーが応答を返すときにのみ実行されるコールバック関数を渡します。設定でタイムアウトを指定することはできますが、タイムアウトエラーが発生することなく提供できる最大時間はわかりません。しかし、少なくとも数秒かかるでしょう。

次のようにあなたも(jqueryのAjaxのAPIから適応が、5秒間のタイムアウトを追加しました)成功のための別のコールバックを指定すると失敗することがあります。

var request = $.ajax({ 
    url: "http://www.some.url/", 
    method: "GET", 
    data: { some : stuff }, 
    dataType: "html", 
    timeout: 5000 
}); 

request.done(function(data) { 
    console.log("SUCCESS: " + data); 
}); 

request.fail(function() { 
    console.log("Request failed"); 
}); 
関連する問題