【问题标题】:AJAX read data in a progressive manner not just when it's completedAJAX 以渐进方式读取数据,而不仅仅是在完成时
【发布时间】:2010-11-01 14:15:36
【问题描述】:

我喜欢为我的 ajax 调用创建一个进度条。 为此,我可以让我的服务器端脚本返回它的进度状态。 所以我需要 javascript 来读取这个进度级别并显示它。

有可能还是我走错了路?

【问题讨论】:

  • HAKI 服务器端的这个处理需要多长时间? 10 秒、1 分钟、5 分钟……?
  • 假设花费了 45 秒或更短的时间(可能是即时的)
  • 用什么计算来确定已经取得了多少进展?
  • 项目有1500个文件,100个已经复制到远程服务器

标签: javascript jquery ajax progress-bar


【解决方案1】:

你可以尝试这样的事情(一些伪代码,假设 jQuery,因为你已经标记了这样的问题):

var poll;
$.ajax({
  url: 'your_ajax_script',
  beforeSend: function(){ // set up out-of-band status polling
    poll = setInterval( function(){
      $.get('your_script_that_returns_status',
        function(data){ 
          update_progressbar(data);
        });
      }, 1000 ); // update every second?
  },
  success: function(data) {
    clearInterval( poll ); // stop polling
    finalize_or_hide_progressbar(); // clean up
    do_something_with( data ); // your "done" logic
  }
});

【讨论】:

  • 这就是问题所在,我给你打了 1 分,因为它是一个新的线索,但是这种方法带来了另一个复杂性,因为第一个脚本应该在其他地方更新进度级别以供第二个脚本读取,它会如果第一个脚本在这个过程中发送关卡会更好
  • 听起来你对彗星模式很感兴趣。阅读此内容:en.wikipedia.org/wiki/Comet_(programming),然后点击此链接中的一些链接:stackoverflow.com/questions/136012/comet-and-jquery。但是:尽可能避免不必要的复杂性。
【解决方案2】:

要么定期轮询,在最终成功调用时返回负载,要么运行两次 AJAX 调用 - 第一次检索实际数据,第二次轮询更新百分比。

【讨论】:

  • 定期投票?有没有具体的jquery函数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-17
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 2013-11-30
  • 2015-12-10
相关资源
最近更新 更多