Javascript Ajax和readyState

Javascript Ajax和readyState,javascript,jquery,ajax,xmlhttprequest,Javascript,Jquery,Ajax,Xmlhttprequest,我试图更新ajax请求函数以显示响应的各个状态 但是,在发送请求后,我得到的只是readyState=1,然后它直接跳到readyState=4,我从服务器得到完整响应 为什么我得不到readyStates 2和3 当我尝试使用本机浏览器时,例如 xmlhttp2 = new XMLHttpRequest() 发送相同的请求会使我的回调中出现readyStates 1、2、3和4: xmlhttp2.onreadystatechange 但是使用JQuery的ajax助手函数就不能了。为什么

我试图更新ajax请求函数以显示响应的各个状态

但是,在发送请求后,我得到的只是
readyState=1
,然后它直接跳到
readyState=4
,我从服务器得到完整响应

为什么我得不到readyStates 2和3

当我尝试使用本机浏览器时,例如

xmlhttp2 = new XMLHttpRequest()
发送相同的请求会使我的回调中出现readyStates 1、2、3和4:

xmlhttp2.onreadystatechange
但是使用JQuery的ajax助手函数就不能了。为什么会这样

这是我的密码:

var jqXHR = $.ajax(
{
    data: requestForm, //my json request
    type: req_type, // could be post or get
    url: script, // php script
    async: true,
    success: function(response,textStatus, xhr) 
    {
          renderIt(response);
    },

    error: function( xhr, textStatus, errorThrown )
    {
        var errText = "<b>Error "+xhr.status+" : "+xhr.reponseText+" , "+textStatus+", "+errorThrown+" </b>";
        $('#'+div).append(errText);
    }
});

jqXHR.fail(function( data, textStatus, jqXHR ) 
{
   var errText = "<b>Error "+jqXHR.status+" : "+jqXHR.reponseText+" , "+textStatus+", "+" </b>";
   $('#'+div).html(errText);
});

switch(jqXHR.readyState) 
{
case 1:
    $('#'+div).html("\n<center> Connected to Server...<br/> <img src='images/loading.gif' height=30 width=30></center>\n");
    break;
case 2:
    $('#'+div).html("\n<center> Request Recieved...<br/> <img src='images/loading.gif' height=30 width=30></center>\n");
    break;
case 3:
    $('#'+div).html("\n<center>  Receiving Responses.....<br/> <img src='images/loading.gif' height=30 width=30></center>\n");
    $('#'+div).append(xhr.responseText);
    break;
default:
    $('#'+div).html("\n<center>  Awaiting Results.."+jqXHR.readyState+"<br/> <img src='images/loading.gif' height=30 width=30></center>\n");
    break;                                    
 } 
var jqXHR=$.ajax(
{
数据:requestForm,//我的json请求
type:req\u type,//可以是post或get
url:script,//php脚本
async:true,
成功:函数(响应、文本状态、xhr)
{
反应;
},
错误:函数(xhr、textStatus、errorshown)
{
var errText=“Error”+xhr.status+:“+xhr.reponseText+”、“+textStatus+”、“+errorshown+”;
$('#'+div).append(errText);
}
});
失败(函数(数据、文本状态、jqXHR)
{
var errText=“Error”+jqXHR.status+”:“+jqXHR.reponseText+”、“+textStatus+”、“+”;
$('#'+div).html(errText);
});
开关(jqXHR.readyState)
{
案例1:
$('#'+div.html(“\n已连接到服务器…
\n”); 打破 案例2: $('#'+div.html(“\n已收到请求…
\n”); 打破 案例3: $('#'+div.html(“\n接收响应…..
\n”); $('#'+div).append(xhr.responseText); 打破 违约: $(“#”+div.html(“\n等待结果…”+jqXHR.readyState+”
\n”); 打破 }
在jQuery中只能得到1和4,因为它的成功回调仅在ajax请求完成后触发,并且


因此,如果出于某种原因需要对该事件进行处理,则需要直接使用XMLHttpRequest。

您意识到switch语句只执行一次,对吗?您是对的!如何绑定由readyState更改触发的开关代码?使用readystatechange事件?但是请注意,这不需要使用jQuery的ajax方法。使用jQuery可以实现这一点,但这充其量只是一种黑客行为。您需要为返回xhr的xhr选项提供回调,然后在返回xhr之前绑定到该xhr上的onreadystatechange事件。我可能错了,但我认为.onreadystatechange()不适用于基于此文档的jqXHR对象基于此答案,我想我必须放弃进行此更改的努力。我之所以开始这样做,是因为一些请求在处理完成之前收到了几块数据,我想向等待的用户显示状态。