0

谁能告诉我为什么我将 readyState 设置为 1 并将 status 设置为 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);
    });
});

谢谢

4

2 回答 2

2

由于 ajax 是异步调用,它不会等待结果,而是跳转到下一行,无论那里写什么。所以在你的情况下,当你调用你的 ajax onsubmit方法时:

 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);
        }
     });
});
于 2015-04-16T09:46:43.310 回答
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);
    }
});
于 2015-04-16T09:47:28.963 回答