My code works fine in jquery 1.4 and i try upgrade it to 1.5.
But this part of code stop working - its standard beforeSend handler
beforeSend: function (xhr, options) {
//
__forced_abort = false;
//
xhr.upload.addEventListener('progress', on_progress, false);
xhr.upload.addEventListener('load', on_loaded, false);
xhr.addEventListener('abort', on_abort, false);
....
I know that in 1.5 havent really xhr - just jqXHR highlevel abstraction and seems to be jqXHR not have upload attributes.
Question: how get pure (old) xhr object in jQuery 1.5?
If your beforeSend was global:
var oldXHR = jQuery.ajaxSettings.xhr;
jQuery.ajaxSettings.xhr = function() {
var xhr = oldXHR();
if(xhr instanceof window.XMLHttpRequest) {
xhr.upload.addEventListener('progress', on_progress, false);
xhr.upload.addEventListener('load', on_loaded, false);
xhr.addEventListener('abort', on_abort, false);
}
return xhr;
};
If your beforeSend was specific to a particular request:
$.ajax({
xhr: function() {
var xhr = jQuery.ajaxSettings.xhr();
if(xhr instanceof window.XMLHttpRequest) {
xhr.upload.addEventListener('progress', on_progress, false);
xhr.upload.addEventListener('load', on_loaded, false);
xhr.addEventListener('abort', on_abort, false);
}
return xhr;
}
});
Extending Raphaels answer to include percentages...
$.ajax({
type: 'POST',
success: function(data)
{
}
xhr: function() {
var xhr = jQuery.ajaxSettings.xhr();
if(xhr instanceof window.XMLHttpRequest) {
xhr.upload.addEventListener('progress', function(){
var percent = 0;
var position = event.loaded || event.position; /*event.position is deprecated*/
var total = event.total;
if (event.lengthComputable) {
percent = Math.ceil(position / total * 100);
}
var percentVal = percent+ '%';
$('#progressBar').css('width',percentVal);
$('#uploadPercentage').html(' '+percentVal);
}, false);
}
return xhr;
},
});
Try use jQuery.ajaxSettings.xhr()