readyState 始终为 1 且状态未定义

readyState always 1 and status is undefined

任何人都可以告诉我为什么我将 readyState 设置为 1 并将以下状态设置为 undefined

$(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);
    });
});

谢谢

由于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);
        }
     });
});

问题是因为请求是异步的,并且您在请求完成之前记录 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);
    }
});