在完成加载之前获取AJAX响应的大小

时间:2014-10-13 17:24:46

标签: javascript jquery ajax content-length

我正在使用jQuery从服务器通过AJAX加载数据,这是一个相当正常的用例。诀窍是我想在请求完成之前从请求中获得预期的内容长度;我希望能够在加载数据时显示进度条。

有什么办法可以做到这一点吗?我必须想象有。谢谢!

更新:服务器必须做很多工作才能生成响应,所以我不想用两个请求来点击它,这样就会失败。

1 个答案:

答案 0 :(得分:3)

您可以在xhr来电中使用ajax个事件,然后将progress event与之挂钩,然后检查event.lengthComputable= true,然后您将获得价值,否则您将没有价值。您可以查看以下代码。

$.ajax({
    type: 'POST',
    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) {
            console.log(evt.lengthComputable);
            if (evt.lengthComputable) {
                var percentComplete = evt.loaded / evt.total;
                console.log(percentComplete );
            }
        }, false);
        return xhr;
    },
    beforeSend: function () {
      // before send
    },
    complete: function () {
       // complete.
    },
    success: function (json) {
       // success;
    }
});