Ajax和readyState

时间:2013-10-11 17:55:06

标签: javascript jquery ajax xmlhttprequest

我正在尝试更新我的ajax请求函数以显示响应的各个状态。

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

为什么我没有准备好状态2和3?

当我尝试使用原生浏览器时,例如

xmlhttp2 = new XMLHttpRequest()

发送相同的请求让我在回调中获得状态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;                                    
 } 

1 个答案:

答案 0 :(得分:2)

在jQuery中只获得1和4,因为只有在ajax请求完成后才会触发成功回调,it does not expose a callback for the readystatechange event

因此,如果由于某种原因您需要能够对此事件进行一些处理,则需要直接使用XMLHttpRequest。