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