如何在jQuery 1.5中获取纯XMLHTTPRequest对象?
我的代码在jquery 1.4中工作正常,我尝试将其升级到1.5。 但是这部分代码停止工作 – 它的标准beforeSend处理程序
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); ....
我知道在1.5还没有真正的xhr – 只是jqXHR高级抽象,似乎是jqXHR没有上传属性。
问题:如何在jQuery 1.5中获得纯(旧)xhr对象?
如果您的beforeSend是全球性的:
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; };
如果您的beforeSend特定于特定请求:
$.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; } });
扩展Raphaels答案包括百分比……
$.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; }, });
尝试使用jQuery.ajaxSettings.xhr()