轮询JSON API直到找到特定密钥

时间:2014-12-24 17:21:15

标签: jquery ajax asynchronous conditional

我正在处理一个提交内容并与内容合作的项目。详细/结果页面可立即用于提交的工作(作业排队等),但结果不一定准备就绪。

我尝试做的是动态加载(通过jQuery)结果,以两种不同的方式显示,但只调查服务器一个结果集,直到{ "status" : "success" }出现在json中。然后仅轮询服务器以获取第二个内容表单。

以下是我目前正在做的(直接)在页面加载时拉入两个数据集。由于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>" );
    });

});

1 个答案:

答案 0 :(得分: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(); });似乎就像魅力一样......