Несколько вызовов jQuery ajax - предыдущие вызовы бросаются неудачно

У меня есть форма входа на мой сайт, который использует ajax для отправки информации для входа в php. После входа в систему пользователь может выйти из системы и снова перенаправляться на страницу входа в систему. Моя проблема заключается в том, что каждый раз, когда вы входите в систему после выхода из системы ранее, метод fail запускает сообщение об ошибке abort.

Например:

*user logs in successfully*
*user logs out*
*user logs in successfully*
The following error occurred: abort abort
*user logs out*
*user logs in successfully*
The following error occurred: abort abort
The following error occurred: abort abort
*user logs out*

Он продолжает так продолжаться, с каждым разом бросается больше ошибок.

Когда пользователь нажимает кнопку отправки формы входа в систему, это код, который выполняется:

p.onMouseClick = function()
{
 var savedRef = this;

 $('#loginForm').on('submit', function(e){

 if(this.request){
 this.request.abort();
 }

 var form = $(this);
 var inputs = form.find("input, select, button, textarea");
 var serializedData = form.serialize();

 inputs.prop("disabled", true);

 this.request = $.ajax({
 url: "http://***********/login.php",
 type: "post",
 data: serializedData
 });

 this.request.done($.proxy(function(result){
 if(result['returnCode'] == 1){
 playerInfo = new PlayerInfo(result['returnMessage']);
 savedRef.loggedIn();
 inputs.prop("disabled", true);
 }
 }, this));
 this.request.fail(function (jqXHR, textStatus, errorThrown){
 // log the error to the console
 console.error(
 "The following error occured: "+
 textStatus, errorThrown
 );
 });
 this.request.always(function(){
 inputs.prop("disabled", false);
 });

 e.preventDefault();
 });
};
1 ответ

Кажется, что ошибка связана с тем, что это:

if(this.request){
 this.request.abort();
}

Я думаю, что это предотвратит функцию выполнения вызова во время другого вызова. Попытайтесь сделать это вместо этого:

if(this.request){
 return false;
}

Кроме того, и очень важно. принять событие form.submit из события click.

на событие click просто вызвать функцию отправки:

var savedRef;

p.onMouseClick = function()
{ 
 savedRef = this; 
 $('#loginForm').submit();
};

$('#loginForm').on('submit', function(e){

 if(this.request){
 this.request.abort();
 } 

 var form = $(this);
 var inputs = form.find("input, select, button, textarea");
 var serializedData = form.serialize();

 inputs.prop("disabled", true);

 this.request = $.ajax({
 url: "http://***********/login.php",
 type: "post",
 data: serializedData
 });

 this.request.done($.proxy(function(result){
 if(result['returnCode'] == 1){
 playerInfo = new PlayerInfo(result['returnMessage']);
 savedRef.loggedIn();
 inputs.prop("disabled", true);
 }
 }, this));
 this.request.fail(function (jqXHR, textStatus, errorThrown){
 // log the error to the console
 console.error(
 "The following error occured: "+
 textStatus, errorThrown
 );
 });
 this.request.always(function(){
 inputs.prop("disabled", false);
 });

 e.preventDefault();
});

licensed under cc by-sa 3.0 with attribution.