当前位置: 首页 > 面试题库 >

通过XHR的jQuery Ajax进度

闾丘文昌
2023-03-14
问题内容

我正在尝试捕获ajax请求的进度。

它没有按预期工作。据我所知,id为 progressProdCounter的 Div
应该在其中包含%的内容,但在我的情况下什么也没有发生。有帮助吗? __

在我看来,这if (evt.lengthComputable) {是行不通的XHR

HTML:

<div id="progressCounter"></div><br>
<div id="loading">Loading</div><br>
<div id="data"></div>

JS:

var progressElem = $('#progressCounter');
var URL = "https://api.github.com/users/mralexgray/repos";
$("#loading").hide();
// write something in #progressCounter , later will be changed to percentage
progressElem.text(URL);

$.ajax({
    type: 'GET',
    dataType: 'json',
    url: URL,
    cache: false,
    error: function (xhr, ajaxOptions, thrownError) {
        alert(xhr.responseText);
        alert(thrownError);
    },
    xhr: function () {
        var xhr = new window.XMLHttpRequest();
        //Download progress
        xhr.addEventListener("progress", function (evt) {
            if (evt.lengthComputable) {
                var percentComplete = evt.loaded / evt.total;
                progressElem.html(Math.round(percentComplete * 100) + "%");
            }
        }, false);
        return xhr;
    },
    beforeSend: function () {
        $('#loading').show();
    },
    complete: function () {
        $("#loading").hide();
    },
    success: function (json) {
        $("#data").html("data receieved");
    }
});

问题答案:

ProgressEvent.lengthComputable

ProgressEvent.lengthComputable只读属性是一个布尔型标志,指示ProgressEvent相关的资源是否具有可以计算的长度。如果不是,则ProgressEvent.total属性没有重大价值。

因此,在您的情况下,如果您进行一点调试,您将发现evt.lengthComputable = false;您无法跟踪进度;

    xhr.addEventListener("progress", function (evt) {
        console.log(evt.lengthComputable); // false
        if (evt.lengthComputable) {
            var percentComplete = evt.loaded / evt.total;
            progressElem.html(Math.round(percentComplete * 100) + "%");
        }
    }, false);

FYI

如果lengthComputable中的false为XMLHttpRequestProgressEvent,则表示服务器从不发送Content- Length header响应。



 类似资料:
  • 问题内容: 通过XHR请求下载pdf文件是否完全不可能?我知道已经有许多关于此主题的讨论,但可悲的是,我仍然对它们不满意。我正在使用AngularJs并使用其方法发出请求。它不返回任何文件下载弹出窗口。但是,如果在新的“浏览器窗口”中使用相同的URL进行点击,则会弹出一个窗口。我已经尝试了一个工作环境,并且可以正常工作,但是如果执行此操作,那么在下载弹出窗口准备就绪并出现之前,我无法显示等待的图像

  • 问题内容: 我有一个使用服务器上的nodejs和socket.io作为连接机制的客户端/服务器应用程序。出于与我的应用程序相关的原因,我希望每个浏览器只有一个活动连接,并拒绝来自其他选项卡的所有连接,这些选项卡可能在会话期间稍后打开。这在WebSockets上很好用,但是如果浏览器不支持WebSockets,而是使用XHR- polling,则断开连接永远不会发生,因此,如果用户只是刷新页面,则不

  • 现在我正在学习Spring靴。 时间戳:“2020-12-09T09:22:27.095+0000”,状态:400,错误:“Bad request”,消息:“Required request body is missing:public java.util….login.loginctr.login(org.json.simple.jsonObject)”,跟踪:“org.springframew

  • XHR

    跨域 XMLHttpRequest 请求 普通网页能够使用XMLHttpRequest对象发送或者接受服务器数据, 但是它们受限于同源策略. 扩展可以不受该限制. 任何扩展只要它先获取了跨域请求许可,就可以进行跨域请求。 注意:页面内容脚本不能直接发起跨域请求. 然而, 任何一个页面内容脚本都可以发送消息给父扩展,请求父扩展发起一次跨域请求。关于使用这一技术的例子,请参照contentscript

  • XHR

    This tiny plugin provides a registry for different xhr implementations to co-exist. It requires jQuery 1.3/1.2.7 with its new feature, the 'xhr' ajax setting. If you want to provide a new implementati

  • 问题内容: 我正在尝试加载使用Backbone构建的Web应用程序,它会提取本地存储的JSON和HTML模板文件。我想知道Chrome打包的应用程序是否可以通过某种“获取” / ajax请求来加载这些文件? 目前我正在得到这个… 我找不到有关如何执行此操作的任何真实信息,因此非常感谢您! 问题答案: 是的,这是完全可能的,而且很容易。这是一个工作示例。尝试从此开始,确认它可以工作,然后重新添加您自