jQuery $ .ajax()功能 - 访问XMLHttpRequest对象

Jus*_*808 10 jquery

是否可以XMLHttpRequest$.ajax()函数的成功回调中访问对象?具体来说,我需要访问XMLHttpRequest.responseBodyIE.根据文档,返回的jqXHR对象不会公开.responseBody属性.

这似乎是一个小问题,在处理二进制数据时会产生巨大影响.如果.responseBody属性或底层XMLHttpRequest对象不可访问,我将不得不跳过jQuery for ajax并将其编码,shudder,纯javascript.

更新

我实际上在寻找responceBody变量,而不是responceText从内部可以轻易访问的变量$.ajax()

Man*_*tto 8

您也可以使用beforeSend回调:

$.ajax({
    beforeSend: function(jqXHR, settings){
        // Here you are the XHR object
        console.log(settings.xhr());
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 问题是ir返回XMLHttpRequest的新实例而不是用于请求的实例,因此任何更改都不会生效. (8认同)
  • 不知道为什么这没有更多的选票,对我来说似乎是最好的解决方案. (2认同)

Mac*_*rio 7

可以覆盖ajax请求的xhr函数.

$.ajax({
  ...
  xhr: function(){
    var xhr = jQuery.ajaxSettings.xhr();
    // do stuff with xhr;
    return xhr;
  }

});
Run Code Online (Sandbox Code Playgroud)

或者详细说明Manuel Bitto的答案,可以从beforeSend回调中访问xhr实例:

$.ajax({
  beforeSend: function(jqXHR, settings){
    var xhr = jQuery.ajaxSettings.xhr();
    settings.xhr = xhr
    // Do stuff with the xhr instance for this request
    xhr.onprogress = function(){

    }
    console.log(xhr);
  }
});
Run Code Online (Sandbox Code Playgroud)


Aqu*_*lle 2

我也希望获取底层的 XMLHttpRequest 对象,以便获取“onprogress”和“upload”属性(在使用 XMLHttpRequest2 的最新浏览器中找到),以便我可以进行本机上传进度处理,而不是使用 hacks 。在深入研究 jQuery 源代码后,我发现您可以通过jQuery.ajaxSettings.xhr(). 它是一个返回原始 XMLHttpRequest 的函数。

请参阅此处: https: //github.com/jquery/jquery/blob/master/src/ajax/xhr.js

希望有帮助。

  • 一个新实例...不是用于当前请求的实例 (3认同)