Secara sederhana, javascript sangat sederhana: hanya perlu melampirkan callback ke {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);
tetapi saya melakukan situs ajax yang mengunduh data html dengan JQuery ( $.get()
atau $.ajax()
) dan saya bertanya-tanya mana cara terbaik untuk mendapatkan kemajuan permintaan untuk menampilkannya dengan sedikit bilah kemajuan tetapi anehnya, saya tidak menemukan sesuatu yang berguna dalam dokumentasi JQuery ...
javascript
ajax
jquery
xmlhttprequest
guari
sumber
sumber
jqXHR
objek (pembungkus objek xhr dikembalikan oleh$.ajax()
) dan menemukanprogress
atribut di dalamnya (bersama denganabort
,complete
,success
, dll), tapi di dokumen JQuery ini hilang: api.jquery.com/jQuery.ajax/#jqXHRJawaban:
Sesuatu seperti ini untuk
$.ajax
(meskipun hanya HTML5):sumber
jQuery telah mengimplementasikan promise, jadi lebih baik menggunakan teknologi ini dan tidak memindahkan logika peristiwa ke
options
parameter. Saya membuat plugin jQuery yang menambahkan janji kemajuan dan sekarang mudah digunakan seperti janji lainnya:Lihat di github
sumber
TypeError: $.ajax(...).progress(...).progressUpload is not a function
.... Apa masalahnya?Saya mencoba sekitar tiga cara berbeda untuk mencegat konstruksi objek Ajax:
xhrFields
, tetapi itu hanya memungkinkan untuk satu pendengar, hanya melampirkan untuk mengunduh (bukan mengunggah) kemajuan, dan memerlukan apa yang tampaknya seperti salin dan tempel yang tidak perlu.progress
fungsi ke janji yang dikembalikan, tetapi saya harus mempertahankan susunan penangan saya sendiri. Saya tidak dapat menemukan objek yang baik untuk dilampirkan penangan karena satu tempat saya akan mengakses XHR dan tempat lain saya memiliki akses ke jQuery XHR, tetapi saya tidak pernah memiliki akses ke objek yang ditangguhkan (hanya janjinya).ajax
dengan milik saya. Satu-satunya kekurangan potensial adalah Anda tidak dapat lagi menggunakanxhr()
pengaturan Anda sendiri . Anda dapat mengizinkannya dengan memeriksa apakahoptions.xhr
suatu fungsi.Saya sebenarnya memanggil
promise.progress
fungsi sayaxhrProgress
sehingga saya dapat menemukannya dengan mudah nanti. Anda mungkin ingin menamainya dengan nama lain untuk memisahkan upload dan download listener Anda. Saya harap ini membantu seseorang meskipun poster aslinya sudah mendapatkan apa yang dia butuhkan.sumber
$.ajax({ ... }).progress(function(evl) { console.log(evl); });
tetapi tidak ada yang terjadi. Bisakah kamu membantuku? :)jQuery memiliki
AjaxSetup()
fungsi yang memungkinkan Anda mendaftarkan penangan ajax global sepertibeforeSend
dancomplete
untuk semua panggilan ajax serta memungkinkan Anda mengaksesxhr
objek untuk melakukan kemajuan yang Anda cari.sumber
.ajaxStart()
,.ajaxStop()
,.ajaxComplete()
,.ajaxError()
,.ajaxSuccess()
,.ajaxSend()
-rather dari dalam pilihan objek untuk$.ajaxSetup()
. ' < api.jquery.com/jQuery.ajaxSetup/#entry-longdesc >http://www.htmlgoodies.com/beyond/php/show-progress-report-for-long-running-php-scripts.html
Saya sedang mencari solusi serupa dan menemukan ini digunakan penuh.
}
dan keluaran server Anda
sumber
Ikuti langkah-langkah untuk menampilkan Progress of Ajax Request:
Untuk membuatnya mudah, saya sarankan Anda menggunakan Kelas JS untuk secara dinamis Menampilkan & Menyembunyikan spinner untuk tujuan ini.
Saya harap ini membantu!
sumber