任何人都可以告诉我为什么我将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);
});
});
谢谢
答案 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);
}
});