jQuery Ajax预过滤器无法修改jqXHR对象属性,如responseJSON

jQuery Ajax预过滤器无法修改jqXHR对象属性,如responseJSON,jquery,ajax,http,interceptor,jqxhr,Jquery,Ajax,Http,Interceptor,Jqxhr,我正在尝试使用API制作一个HTTP Ajax拦截器 这是你的电话号码 如您所见,我可以在prefilter函数中访问jqXHR对象,甚至可以对整个jqXHR对象进行console.log,但某些属性(如responseJSON)在直接指向它们时返回未定义。 这是我想要修改的属性,以便完成HTTP拦截器 关于为什么我不能访问jqXHR.responseJSON属性有什么想法吗 下面是在JSFIDLE上运行的代码片段 var data = { 'msg': 'hey!' }; $.ajax

我正在尝试使用API制作一个HTTP Ajax拦截器

这是你的电话号码

如您所见,我可以在prefilter函数中访问jqXHR对象,甚至可以对整个jqXHR对象进行console.log,但某些属性(如responseJSON)在直接指向它们时返回未定义。 这是我想要修改的属性,以便完成HTTP拦截器

关于为什么我不能访问jqXHR.responseJSON属性有什么想法吗

下面是在JSFIDLE上运行的代码片段

var data = {
   'msg': 'hey!'
};

$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {

    console.log(jqXHR);   --> Returns the entire jqXHR object
    console.log(Object.isSealed(jqXHR));  --> return false
    console.log(Object.isFrozen(jqXHR));  --> return false
    console.log(jqXHR.responseJSON);      --> return undefined

});


$.ajax({
    type: 'POST',
    url: '/echo/json/',
    cache: false,
    data: {
        json: JSON.stringify(data),
        delay: 0
    }
}).done(function (data) {
    document.getElementById('msg').innerHTML = data.msg;
});

代码的其余部分按预期工作,您可以在我的小提琴上查看。

与普通对象$不同。ajaxPreFilter允许您在发送请求之前访问请求。使用,您可以添加一个完整的处理程序functionstatus、statusText、responses、headers,其中responses是一个包含数据类型/值的对象,该数据类型/值包含传输可以使用的所有格式的响应provide@Andreas谢谢你的回复。我知道jqXHR!=XmlHttpRequest.@Andreas如果您运行我的JSFIDLE并检查控制台,您将看到$.ajax.prefilter返回de jqXHR响应,但不要偏离问题。为什么我不能访问reponseJSON属性?如果它存在,我可以通过console.log看到它?responseJSON只有在发送请求并且有来自服务器的响应后才可用-发生在源中。如前所述,$.ajaxPreFilter发生在发送请求之前。