readyState始终为1,状态未定义

时间:2015-04-16 09:37:56

标签: php jquery ajax readystate

任何人都可以告诉我为什么我将readyState设为1并且状态为未定义以下

$(document).ready(function(){
    $('.delsub').on('submit', function (event){
        event.preventDefault();
        var xhr = $.ajax({
            url: 'delRept.php',
            type: 'POST',            
            data: "&delsub=delsub",
            success: function(d){
                console.log(d);
            }
         });
         console.log(xhr.readyState);
         console.log(xhr.status);
    });
});

谢谢

2 个答案:

答案 0 :(得分:2)

由于ajax是异步调用,它不会等待结果,而是跳转到下一行,无论它写在那里。因此,在您使用submit方法调用ajax的情况下:

 var xhr = $.ajax({}); // here you assign the ajax to a var xhr

在该调用之后,您已经习惯将状态输出到控制台:

console.log(xhr.readyState); // logs the state of the ajax

所以在你的情况下问题是ajax是异步调用所以每当ajax代码被分配给xhr之后你就会记录状态。所以每次它都会记录1


如果您浏览文档,可以看到有complete:fn回调,您可以使用它:

$('.delsub').on('submit', function (event){
    event.preventDefault();
    var xhr = $.ajax({
        url: 'delRept.php',
        type: 'POST',            
        data: "&delsub=delsub",
        success: function(d){
            console.log(d);
        },
        complete:function(xhr){
            console.log(xhr.readyState);
            console.log(xhr.status);
        }
     });
});

或者如果您想对不同的状态执行某些操作,则可以使用statusCode:{}

$('.delsub').on('submit', function (event){
    event.preventDefault();
    var xhr = $.ajax({
        url: 'delRept.php',
        type: 'POST',            
        data: "&delsub=delsub",
        statusCode:{
            200:function(){
               console.log(xhr.readyState);
               console.log(xhr.status);
               alert('200');
            }, 
            304:function(){
               console.log(xhr.readyState);
               console.log(xhr.status);
               alert('304');
            }
        },
        success: function(d){
            console.log(d);
        }
     });
});

答案 1 :(得分:1)

问题是因为请求是异步的,并且在请求完成之前您正在记录readyState,因此它总是1。如果您需要检查这些值,您需要将它们放在success回调中,以便它们在请求完成后执行:

var xhr = $.ajax({
    url: 'delRept.php',
    type: 'POST',            
    data: "&delsub=delsub",
    success: function(d){
        console.log(d);
        console.log(xhr.readyState);
        console.log(xhr.status);
    }
});