2014-12-24 60 views
1

我正在處理一個項目,需要提交,並與內容一起工作。詳細信息/結果頁面立即可用於提交的工作(例如,作業已排隊),但結果不一定就緒。輪詢API的JSON,直到找到特定的鍵

我想要做的是動態加載(通過jQuery)結果,以兩種不同的方式顯示,但只能輪詢服務器的一個結果集,直到{ "status" : "success" }出現在json中。只有然後輪詢服務器以獲取第二個內容表單。

下面是我目前正在做的(直截了當)在頁面加載時拉入兩個數據集。由於JS不是我的長處,我不確定如何在定時循環中執行異步調用,直到'狀態'鍵的值爲'成功',然後顯示結果集

任何幫助/建議表示讚賞:)

$(document).ready(function() 
{ 
    // Pull in HTML Results 
    $.get("/api/v1/web/analysis/{{jobID}}?html=true", function(data) 
    { 
     console.log(data); 
     $("#results").html(data); 
    }); 

    // Pull in raw JSON for this result report 
    $.get("/api/v1/analysis/{{jobID}}", function(data) 
    { 
     console.log(data); 
     $("#JSONresults").html("<pre>"+JSON.stringify(data, undefined, 8)+"</pre>"); 
    }); 

}); 

回答

0

我想通了,以幫助從How to call a function within $(document).ready from outside it

function getResults() 
{ 
    $.ajax(
    { 
     url: "/api/v1/analysis/{{jobID}}", 
     dataType: 'json', 
     error: function(data) 
     { 
      // Do nothing/Terminate this function 
     }, 

     success: function(data) 
     { 
      if (data.status == 'queued') 
      { 
       // Wait 1.5 seconds and poll again 
       setTimeout(function() { getResults(); }, 1500); 

      } else if (data.status == 'success') 
      { 

       // Update our HTML formatted results 
       $.get("/api/v1/analysis/{{jobID}}?html=true", function(data) 
       { 
        console.log(data); 
        $("#results").html(data); 
       }); 

       // Update our JSON content 
       $("#JSONresults").html("<pre>"+JSON.stringify(data, undefined, 8)+"</pre>"); 

      } else { 

       // Our status code wasn't right... 
       alert("A status code was returned that indicates an issue (JSON results say _not_ 'success' or 'queued')") 

      } 
     }, 

     contentType: 'application/json' 
    }); 
} 

調用getResults()從內$(document).ready(function(){ getResults(); });看起來就像一個魅力的工作:)