1

応答の個々の状態を表示するために ajax 要求関数を更新しようとしています。

ただし、リクエストを送信した後に取得するのはreadyState = 1、直接ジャンプし readyState = 4てサーバーから完全な応答を取得することだけです。

状態 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;                                    
 } 
4

1 に答える 1

2

jQuery では 1 と 4 しか得られません。その成功のコールバックは ajax リクエストが完了すると発生するだけであり、readystatechange イベントのコールバックを公開しないためです。

したがって、何らかの理由でこのイベントに対して何らかの処理を行う必要がある場合は、XMLHttpRequest を直接使用する必要があります。

于 2013-10-11T18:16:34.677 に答える