Как мониторить процент загрузки при использовании 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 размер файла.
Похожие статьи
Это единственная запись в данном разделе.