readyState всегда 1 и статус не определен

Может кто-нибудь, пожалуйста, скажите мне, почему я получаю 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

Решение

Поскольку 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);
}
});
});
2

Другие решения

Проблема заключается в том, что запрос является асинхронным, и вы регистрируете 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);
}
});
1

По вопросам рекламы [email protected]