【问题标题】:How to get pure XMLHTTPRequest object in jQuery 1.5?如何在 jQuery 1.5 中获取纯 XMLHTTPRequest 对象?
【发布时间】:2011-02-06 19:48:54
【问题描述】:

我的代码在 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 对象?

【问题讨论】:

    标签: jquery xmlhttprequest jquery-1.5


    【解决方案1】:

    如果你的 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;
        }
    });
    

    【讨论】:

    • 看起来应该是 xhr: function(){
    • 感谢全球解决方案!
    【解决方案2】:

    扩展拉斐尔答案以包括百分比...

            $.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;
                },                                  
            }); 
    

    【讨论】:

      【解决方案3】:

      尝试使用 jQuery.ajaxSettings.xhr()

      【讨论】:

      • 用作?能举个小例子吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 2023-03-21
      • 2011-11-15
      • 1970-01-01
      相关资源
      最近更新 更多