Webmasterpark.ru - блог о продвижении и создании сайтов

Как мониторить процент загрузки при использовании AJAX

19.10.2023

Процент загрузки — это индикатор, отображающий текущий статус загрузки данных во время выполнения запроса AJAX. Этот параметр позволяет пользователям видеть, насколько далеко продвинулась загрузка, что особенно полезно при обработке больших объемов информации. Он также повышает уровень удовлетворения пользователей, предоставляя им информацию о процессе.

Файл jQuery плагина q-ajax-progress.js

(function(factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module.
    define(['jquery'], factory);
  } else if (typeof exports === 'object') {
    // Node/CommonJS
    module.exports = factory(require('jquery'));
  } else {
    // Browser globals
    factory(jQuery);
  }
}(function($) {
  var $originalAjax = $.ajax.bind($);

  $.ajax = function (url, options) {
    if (typeof url === 'object') {
      options = url;
      url = undefined;
    }

    options = options || {
      chunking: false
    };

    // Get current xhr object
    var xmlHttpReq = options.xhr ? options.xhr() : $.ajaxSettings.xhr();
    var chunking = options.chunking || $.ajaxSettings.chunking;

    // Make it use our own.
    options.xhr = function () {
      if (typeof options.uploadProgress === 'function') {
        if (!xmlHttpReq.upload) {
          return;
        }

        // this line looks strange, but without it chrome doesn't catch `progress` event on uploading. Seems like chromium bug
        xmlHttpReq.upload.onprogress = null;

        // Upload progress listener
        xmlHttpReq.upload.addEventListener('progress', function (e) {
          options.uploadProgress.call(this, e);
        }, false);
      }

      if (typeof options.progress === 'function') {
        var lastChunkLen = 0;

        // Download progress listener
        xmlHttpReq.addEventListener('progress', function (e) {
          var params = [e],
            chunk = '';

          if (this.readyState === XMLHttpRequest.LOADING && chunking) {
            chunk = this.responseText.substr(lastChunkLen);
            lastChunkLen = this.responseText.length;
            params.push(chunk);
          }

          options.progress.apply(this, params);
        }, false);
      }

      return xmlHttpReq;
    };

    return $originalAjax(url, options);
  };
}));

Применение плагина

jQuery.ajax({
  type: 'POST',
  url: '/',
  data: { get : 'table' },
  cache: false,
  success: function(result) {
    console.log(result);
  },
  error: function(result) {
    console.log('Ошибка!');
  },
  progress: function(e) {
    procent = (e.loaded * 100 / e.total).toFixed();
    console.log(procent); // Процент приема файла
  }
});

где:
e.loaded количество загруженных байт,
e.total размер файла.

Поделиться статьей
Похожие статьи
Это единственная запись в данном разделе.

Напишите мне

info@webmasterpark.ru Или
Отправьте заявку на сотрудничество: