2013-08-04 93 views
1

我有一个PHP进程更新文件,并写入每个文件的状态报告。getJSON循环直到响应

虽然这种情况正在发生,但我希望能够更新用户的浏览器直到最终响应。

除非有更好的方法,否则我只是想要一些建议,如何循环无限刷新getJSON()结果,直到ajax响应结束。

这样做的最好方法是什么?

+0

您可能会感兴趣的服务器发送的事件(http://www.w3schools.com/html/html5_serversentevents.asp)。 –

+0

您可以继续处理PHP端,并发出更多的HTML。 (把它当作行式打印机处理)。只要您至少偶尔发送一些内容,浏览器就会继续渲染并等待更多内容。当你终于完成时,关闭''。 –

+0

我不知道有什么“最好”的方式来完成这个细节的水平。我见过很多方法来做这种事情。只要看看聊天系统的任何HTTP实现。更现代的例子可能会使用Websockets(或IIS/ASP.NET世界中的SignalR)。 – JayC

回答

0

这结束了我使用的解决方案:

$(document).on('click', "#ss_batch_edit_processing", function (e) { 

    var ids = get_selected(); 
    var status_location = '<?php echo symbiostock_TMPDIR . '/report.txt' ?>'; 

    if(ids == 0){ 
     return; 
     }  

    $('.' + loading_icon_small).show(); 

    var data = { 
     action: 'ss_professional_ajax', 
     security: '<?php echo $ajax_nonce; ?>', 
     reprocessing_action: $('input:radio[name=ss_reprocessing_action]:checked').val(), 
     ids: ids,     
    };  

    var completed = 0; 

    $.post(ajaxurl, data, function (response) { 

     $('.' + loading_icon_small).hide(); 

     completed = 1;  

    }); 

    var get_update = function(){  

     $.getJSON(status_location, function (data) {     
      var update = '<ul><li><strong>'+data['title']+'</strong></li><li><strong>Count:</strong> '+data['count']+'/'+data['total']+'</li><li><strong>Last processed</strong>: Image # '+data['last_id']+'</li></ul>'; 
      $('#ss-reprocessing-results').html(update).delay(1000);   
     }); 

     if(completed == 1){ 
      clearInterval(timed_requests) 
      return false; 
     } 

    };  

    var interval = 1000; // every 1 second  
    var timed_requests = setInterval(get_update, interval);   
});