2014-03-25 31 views
-1

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

目前:

$('#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> 
    

回答

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