2014-12-24 1 views
1

Я работаю над проектом, который принимает заявки и действительно работает с контентом. Страница результатов/результатов сразу же доступна для представленной работы (например, задача поставлена ​​в очередь), но результаты не обязательно готовы.Опрос API для JSON до тех пор, пока не будет найден конкретный ключ

То, что я пытаюсь сделать, - это динамически загрузить (через jQuery) результат, отображаемый двумя разными способами, но только опросить сервер для одного набора результатов, пока в json не появится { "status" : "success" }. Только тогда опросите сервер для второй формы содержания.

Ниже приведено то, что я сейчас делаю (прямо), чтобы вытащить оба набора данных при загрузке страницы. Поскольку JS не является моей сильной стороной, я не уверен, как я буду делать асинхронный вызов в тайм-петле до тех пор, пока значение «status» не станет «успешным», а затем отобразит оба набора результатов.

Любая помощь/предложения оценили :)

$(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' 
    }); 
} 

Calling getResults() изнутри $(document).ready(function(){ getResults(); });, кажется, работает как шарм :)

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