Em javascript puro é muito simples: basta anexar o retorno de chamada para {XMLHTTPRequest}.onprogress
var xhr = new XMLHttpRequest();
xhr.onprogress = function(e){
if (e.lengthComputable)
var percent = (e.loaded / e.total) * 100;
};
xhr.open('GET', 'http://www...', true);
xhr.onreadystatechange = function() {
...
};
xhr.send(null);
mas estou fazendo um site ajax que baixa dados html com JQuery ( $.get()
ou $.ajax()
) e queria saber qual é a melhor maneira de obter o andamento de uma solicitação para exibi-la com uma pequena barra de progresso, mas curiosamente, não estou encontrando algo útil na documentação JQuery ...
javascript
ajax
jquery
xmlhttprequest
guari
fonte
fonte
jqXHR
objeto (o wrapper de objeto xhr retornado por$.ajax()
) e encontrou umprogress
atributo nele (junto comabort
,complete
,success
, etc.), mas nos documentos JQuery está faltando: api.jquery.com/jQuery.ajax/#jqXHRRespostas:
Algo assim para
$.ajax
(embora apenas HTML5):fonte
jQuery já implementou promessas, então é melhor usar essa tecnologia e não mover a lógica de eventos para
options
parâmetro. Fiz um plugin jQuery que adiciona promessa de progresso e agora é fácil de usar, assim como outras promessas:Confira no github
fonte
TypeError: $.ajax(...).progress(...).progressUpload is not a function
.... Qual é o problema?Tentei três maneiras diferentes de interceptar a construção do objeto Ajax:
xhrFields
, mas que permite apenas para um ouvinte, apenas anexa para download (não upload) progresso e requer o que parece ser copiar e colar desnecessário.progress
função à promessa retornada, mas tive que manter minha própria matriz de manipuladores. Não consegui encontrar um bom objeto para anexar os manipuladores porque um lugar teria acesso ao XHR e outro ao jQuery XHR, mas nunca tive acesso ao objeto adiado (apenas sua promessa).ajax
minha. A única deficiência potencial é que você não pode mais usar sua própriaxhr()
configuração. Você pode permitir isso verificando seoptions.xhr
é uma função.Na verdade, chamo minha
promise.progress
funçãoxhrProgress
para que possa encontrá-la facilmente mais tarde. Você pode querer dar outro nome para separar seus ouvintes de upload e download. Espero que isso ajude alguém, mesmo que o autor da postagem original já tenha o que precisava.fonte
$.ajax({ ... }).progress(function(evl) { console.log(evl); });
mas nada está acontecendo. Pode me ajudar? :)jQuery tem uma
AjaxSetup()
função que permite registrar manipuladores globais de ajax, comobeforeSend
ecomplete
para todas as chamadas de ajax, bem como permite que você acesse oxhr
objeto para fazer o progresso que você está procurandofonte
.ajaxStart()
,.ajaxStop()
,.ajaxComplete()
,.ajaxError()
,.ajaxSuccess()
,.ajaxSend()
-mais que dentro das opções objeto para$.ajaxSetup()
. ' < api.jquery.com/jQuery.ajaxSetup/#entry-longdesc >http://www.htmlgoodies.com/beyond/php/show-progress-report-for-long-running-php-scripts.html
Eu estava procurando por uma solução semelhante e encontrei este uso completo.
}
e as saídas do seu servidor
fonte
Siga as etapas para exibir o andamento da solicitação Ajax:
Para facilitar, eu recomendo que você use classes JS para exibir e ocultar dinamicamente o botão giratório para essa finalidade.
Eu espero que isso ajude!
fonte