Может кто-нибудь, пожалуйста, скажите мне, почему я получаю 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);
});
});
Спасибо
Поскольку ajax является асинхронным вызовом, он не ждет результата, а переходит на следующую строку, что бы там ни было написано. Так что в вашем случае, когда вы называете свой AJAX на submit
метод:
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);
}
});