2016-06-13 2 views
0

私はポストコールを持っています。結果を出した後、もう一度やりたいのですが、ステータスを確認するためにCALLを取得してください。ただし、ステータスがFINISHEDの場合はのみです。jqueryでポーリングするにはどうすればいいですか?

jQuery.ajax({ 
     type: "POST", 
     contentType: "application/json", 
     url: "/doPostURL...., 
     headers: { 
      "x-csrf-token": sCsrftoken 
     }, 
     success: function() { 
     .. now I want to do the polling on the status 
     jQuery.ajax({ 
      type: "GET", 
      dataType: "json", 
      url: "/getStatusUrl , 
      success: function(data, textStatus, response) { 
     // to continue only if status if Finished 
      }, 
      error: function() { 
      } 
     }); 
    } 
}); 
+0

なぜ成功関数を呼び出さないのですか? –

+0

最初の呼び出しはPOSTであるので、統計を確認するために呼び出しを取得する必要があります。ステータスがFINISHEDであれば続行したいが、時間がかかる可能性がある – user1365697

+2

"contentType:" application/json "、" - GET要求を出している。のコンテンツタイプを記述する要求本文はありません。そこには何がありますか? 'dataType'と混同していますか? (そのため、以前のPOSTリクエストの 'data'もありません。そのため、いずれのJSONもありません) – Quentin

答えて

1

$を。

次のようなことができます。詳細情報here

var doSomething = $.ajax({ 
    url: '/path/to/file', 
    type: 'default GET (Other values: POST)', 
    dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)', 
    data: {param1: 'value1'}, 
}) 
function doneCallback(){ 
    // Handle exit condition here. 
    doSomething(); 
} 
function failCallback(){ 
    // Handle failure scenario here. 
} 
doSomething.then(doneCallback, failCallback) 
+0

ここではポーリングはありません – user1365697

+0

'setTimeout(doSomething、pollingInterval);のようにdoneCallbackを実装することができます –

+0

ちょっと分かりやすくするには...ここで動作します:最初にdoSomethingが呼び出されます。 、doneCallbackが呼び出されました... doneCallbackの内部で、特定のポーリング間隔のあとにdoSomethingを再度呼び出しています。このサイクルは、出口条件が満たされない限り継続する。 –

1

あなたは関数へajaxコールをエクスポートして、プールに再帰を使用しようとすることができます。

注:無制限の通話でサーバをフラッドさせないように、最大​​カウンタが必要です。

var max_count = 20; 
var counter = 0; 

function getStatus() { 
    jQuery.ajax({ 
    type: "GET ", 
    contentType: "application/json ", 
    url: "/getStatusUrl, 
    success: function(data, textStatus, response) { 
     // to continue only if status if Finished 
     if (textStatus != "status" && ++counter < max_count) { 
     getStatus(); 
     } 
    }, 
    error: function() {} 
    }); 
} 
1

ジャスト機能でコードを設定します。延期オブジェクトを返しますアヤックス

jQuery.ajax({ 
    type: "POST", 
    contentType: "application/json", 
    url: "/doPostURL...., 
    headers: { 
     "x-csrf-token": sCsrftoken 
    }, 
    success: function() { 
     doPoll(); 
    } 
}); 

var doPoll = function() { 
    jQuery.ajax({ 
    type: "GET", 
    contentType: "application/json", 
    url: "/getStatusUrl , 
    success: function(data, textStatus, response) { 
     //do stuff 
     doPoll(); 
    }, 
    error: function() { 
     //handle error 
    } 
    }); 
} 
+0

ステータスを確認するために、もし私がdoPollにもう一度呼び出す必要がない状態であれば? – user1365697

+0

あなたの質問を言い換えることができますか?私はあなたが何を言おうとしているのか十分に理解していません。 –

関連する問題