最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Ajax and readyState - Stack Overflow

programmeradmin1浏览0评论

I am trying to update my ajax request function to show the individual states of the response.

However all I get after I send the request is readyState = 1 and then it jumps directly to readyState = 4 and I get the full response from the server.

Why am I not getting readyStates 2 and 3?

When I experimented with native browser, e.g.

xmlhttp2 = new XMLHttpRequest()

Sending the same requests gets me readyStates 1, 2, 3, and 4 in my callback:

xmlhttp2.onreadystatechange

But with the JQuery ajax helper function does not. Why is this occuring?

Here is my code:

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;                                    
 } 

I am trying to update my ajax request function to show the individual states of the response.

However all I get after I send the request is readyState = 1 and then it jumps directly to readyState = 4 and I get the full response from the server.

Why am I not getting readyStates 2 and 3?

When I experimented with native browser, e.g.

xmlhttp2 = new XMLHttpRequest()

Sending the same requests gets me readyStates 1, 2, 3, and 4 in my callback:

xmlhttp2.onreadystatechange

But with the JQuery ajax helper function does not. Why is this occuring?

Here is my code:

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;                                    
 } 
Share Improve this question edited Oct 11, 2013 at 18:08 Dauh Fhauc 14111 bronze badges asked Oct 11, 2013 at 17:55 seedhomseedhom 3492 gold badges6 silver badges19 bronze badges 8
  • You realize that switch statement only executes once, right? – Kevin B Commented Oct 11, 2013 at 18:01
  • You are right! How do I bind the switch code to be triggered by a readyState change? – seedhom Commented Oct 11, 2013 at 18:12
  • use the readystatechange event? Note however that requires not using jQuery's ajax methods. – Kevin B Commented Oct 11, 2013 at 18:12
  • There are ways of doing it using jQuery, but it's a hack at best. you would need to supply a callback to the xhr option that returns an xhr, then bind to the onreadystatechange event on that xhr before you returned it. – Kevin B Commented Oct 11, 2013 at 18:15
  • I could be wrong, but I thought that .onreadystatechange() is not available for jqXHR object based on this doc api.jquery./jQuery.ajax – seedhom Commented Oct 11, 2013 at 18:19
 |  Show 3 more ments

1 Answer 1

Reset to default 3

You only get 1 and 4 in jQuery because its success callback only fires once the ajax request pletes, and it does not expose a callback for the readystatechange event.

So, if for some reason you need to be able to do some processing on this event, you will need to use XMLHttpRequest directly.

发布评论

评论列表(0)

  1. 暂无评论