Función con ajax retorna objeto, pero al usar objeto sus valor siempre es false

  • Autor Autor campos84
  • Fecha de inicio Fecha de inicio
C

campos84

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de 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;
}
 
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:

Insertar CODE, HTML o 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;
}
 
Atrás
Arriba