【问题标题】:How to show loading status in percentage for ajax response?如何以百分比显示 ajax 响应的加载状态?
【发布时间】:2013-05-17 10:39:42
【问题描述】:

我想显示加载进度条的 ajax 响应的用户百分比。 有没有办法实现它? 现在我只显示一张图片。

这是我的代码示例:

$('#loadingDiv').show();

$.ajax({
        type : 'Get',
        url : myUrl,
        success : function(response) {
            $('#loadingDiv').hide();
            populateData(response);
        },
        error: function(x, e) {
                    $('#loadingDiv').hide();
            if (x.status == 500 || x.status == 404) {
                    alert("no data found");
                }
        }
    });

HTML 代码:

<div id="loadingDiv">
     <img src="loading-img.png"/>
</div>

【问题讨论】:

标签: javascript jquery ajax


【解决方案1】:

有两种显示实际百分比的方法。简单地说……

One - 旧式原生 JavaScript 或 jQuery ajax,您还需要服务器支持,一个可以为您提供更新的不同 URL。而且您会定期访问该 URL。

两个 - HTML5 浏览器中的现代原生原生 JavaScript,支持 XMLHTTPRequest2,也称为 AJAX 2,由新的 Web 和 HTML5 标准定义。

如果有两个,欢迎来到新网络!!
浏览器中添加了多项增强连接性的功能 - HTML5 功能的一部分。

XMLHTTPRequest2 启用 AJAX 中的事件,帮助监控来自 JavaScript 本身的进度以及许多其他事情。您可以通过监控实际进度来显示实际百分比

var oReq = new XMLHttpRequest();

oReq.addEventListener("progress", updateProgress, false);
oReq.addEventListener("load", transferComplete, false);
oReq.addEventListener("error", transferFailed, false);
oReq.addEventListener("abort", transferCanceled, false);

oReq.open();

然后您可以定义上面附加的处理程序(progress 在您的情况下):

function updateProgress (oEvent) {
  if (oEvent.lengthComputable) {
    var percentComplete = oEvent.loaded / oEvent.total;
    // ...
  } else {
    // Unable to compute progress information since the total size is unknown
  }
}

jQuery 也可以用于第二种情况。毕竟,jQuery 是为了帮助您少写代码,多做事!

希望您专注于 HTML5 和新的 Web 解决方案,我会向您指出 Mozilla DOC - Monitoring Progress in AJAX 来自我采用此解决方案的地方。

现在每个浏览器都有一个网络文档(就像上面来自 Mozilla 的那个),此外,他们都与其他有影响力的网络和互联网巨头一起为名为 Web Platform 的共同事业做出贡献 - 共同更新网络文档。这是一项正在进行的工作,因此尚未完成。

此外,旧 AJAX 中没有用于监控进度的本机功能

以老派的方式,您必须创建一个间隔函数,该函数将不断点击单独的 URL 以获取进度更新。您的服务器还必须更新进度并将其作为来自不同端口可用的 URL 的响应发送。

【讨论】:

  • 不知道XMLHTTPRequest2,太棒了。
  • 这对我不起作用,因为我要检索的文件非常小(只有几个字节);但是我的脚本需要很长时间才能执行;我猜这是由于服务器延迟......但是我如何区分卡住的脚本和慢速服务器?我在开始检索之前打印了“请稍候...”消息,但是 10 字节输出的“请稍候”消息不能持续超过 10 秒,而不会引起用户对“某些东西被锁定”的怀疑。见stackoverflow.com/questions/35482101/…
  • 对 javascript 来说没问题,但是在 jQuery 中如何使用呢?
  • “进度”仅在发布数据时给出状态。例如,在 blob 下上传一个大文件,这将非常有帮助。我也在寻找一种解决方案来计算服务器处理和下载时的特殊情况。但这似乎是不可能的
  • 答案很好,我只想添加另一个关于 XMLHttpRequest 的 progress_event 的文档:developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/…。它还有一个活生生的例子!
猜你喜欢
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 2020-05-20
  • 2012-03-05
  • 2017-08-08
相关资源
最近更新 更多