Função com AJAX retorna objeto, mas ao usar o objeto seu valor é sempre false

  • Autor Autor campos84
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
C

campos84

Curioso
Usuário com poucas negociações! Use sempre o saldo do ForoBeta!
La variable own que recibe un objeto devuelto de la función, siempre acaba valiendo false. Debugeando, el AJAX se ejecuta correctamente y construye bien el objeto owner. El problema viene al definir la variable own haciendo un llamado a getOwnerAjax. La variable own siempre es false y no puedo usarla.

var own=getOwnerAjax($('#hid').val());

function getOwnerAjax(id)
{

let msg="";
$.ajax({
url: "get_owner",
type: "POST",
dataType: "json",
data: JSON.stringify({'ident':id}),
success: function(response) {

const obj = JSON.parse(response);

let name= obj[0].fields["name"];
let mail= obj[0].fields["mail"];
let password= obj[0].fields["password"];
let isadmin= obj[0].fields["isAdmin"];

const owner = new Object();
owner.name=name;
owner.mail=mail;
owner.password=password;
owner.isadmin=isadmin;

console.log(owner);
return owner;
},
error: function() {
console.log("err");
msg="An error occurred";
return false;

}
});
return false;
}
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
Siempre es false debido al último "return false" que está después de la llamada AJAX. Mientras tu llamada se ejecuta, la función ya retornó false porque el hilo principal llegó allí.
 
Veo los siguientes errores:
  1. Es innecesario el JSON.parse(response) ya que el momento de la llamada AJAX estás agregando el parámetro dataType: "json" por lo cual el mismo objeto AJAX hace la conversión.
  2. Estás declarando el objeto como una CONSTANTE. Lo cual indica que una vez declarado no puede cambiar su valor. Recomiendo cambiar por LET.
Aplica esos cambios y comentas nuevamente.

Saludos.!!!
 
Es porque la funcion $.ajax es asincrona, entonces la funcion te vuelve antes de resolver el post, proba poniendo async en false para que se comporte de manera sincrona. Seria asi:

Inserir CODE, HTML ou PHP:
var own=getOwnerAjax($('#hid').val());

function getOwnerAjax(id)
{

let msg="";
$.ajax({
async: false,
url: "get_owner",
type: "POST",
dataType: "json",
data: JSON.stringify({'ident':id}),
success: function(response) {

const obj = JSON.parse(response);

let name= obj[0].fields["name"];
let mail= obj[0].fields["mail"];
let password= obj[0].fields["password"];
let isadmin= obj[0].fields["isAdmin"];

const owner = new Object();
owner.name=name;
owner.mail=mail;
owner.password=password;
owner.isadmin=isadmin;

console.log(owner);
return owner;
},
error: function() {
console.log("err");
msg="An error occurred";
return false;

}
});
return false;
}
 
Voltar
Topo