AJAX请求具有更新URL的JSON响应

时间:2014-03-25 08:22:26

标签: javascript jquery ajax

我有以下代码在页面加载时执行其工作,但我需要将其转换为在页面加载时每5秒连续发送一次请求。每个页面加载,请求的URL将使用JSON响应变量data.update_hash替换当前的verification_code进行更新。我打算在将来扩展时坚持使用$ .getJSON。

目前:

$('#update_status').replaceWith($('<p id="update_status">'+data.update_hash+'</p>'));

仅用于调试并验证请求是否正常。通常不会更新任何内容,只会更新下一个JSON请求的URL。

背景资料:

  • 使用无脂肪框架
  • JQuery 1.10.1

        <check if="{{ @ajax_update }}"><script type="text/javascript">
    //<![CDATA[
    $(document).ready(function() {
        $.getJSON( '/ajax/update-status/{{ @verification_code }}', {
          format: 'json'
        })
        .done(function( data ) {
            if ( data.status == 'continue' ) {
                $('#update_status').replaceWith($('<p id="update_status">'+data.update_hash+'</p>'));
            }
            else
            {
                $('#update_status').replaceWith($('<p id="update_status">'+data.message+'</p>'));
            }
        });
    });
    //]]>
    </script></check>
    

1 个答案:

答案 0 :(得分:0)

您可以在.done处理程序中设置递归调用,如下所示:

function getToken(url) {
    $.getJSON( url, {
        format: 'json'
    })
    .done(function( data ) {
        if ( data.status == 'continue' ) {
            $('#update_status').replaceWith($('<p id="update_status">'+data.update_hash+'</p>'));

            //calculate the new URL and call the function recursively after 5 seconds
            var newURL = '/ajax/update-status/' + data.update_hash;
            setTimeout(function (){
                getToken(newURL);
            }, 5000);
        }
        else
        {
            $('#update_status').replaceWith($('<p id="update_status">'+data.message+'</p>'));
        }
    });
}

然后,您可以将其连接到页面加载,如此

$(document).ready(function() {
    getToken('/ajax/update-status/{{ @verification_code }}');
}