Para responder primero a su segunda pregunta: La función $.post()
comienza una solicitud asíncrona Ajax. Esto significa que la función $.post()
se devuelve inmediatamente y la ejecución continúa con la siguiente línea de código, que en este caso es alert()
. Luego, una vez que la solicitud de Ajax complete la función anónima que proporcionó al $.post()
, se ejecutará una devolución de llamada, de modo que si esa función también contiene un alert()
, se mostraría.
En cuanto a su primera pregunta: el valor de this
en una función depende de cómo se llamó a una función, y jQuery normalmente lo establece cuando llama a sus funciones de devolución de llamada, pero por supuesto no lo configurará en su objeto UserMenu . La solución más fácil es ahorrar this
en una variable que es local a la función retrieve()
y luego hacer referencia esa variable desde tu función:
var UsersMenu = function(){
this.returnUsers = [];
this.retrieve = function(posts){
var self = this,
temp = [];
$.post("router.php", { "action": "getUsersMenu", "posts" : posts},
function(data)
{
if(data.response){
for(var i=0; i<data.returnUsers.length; i++){
temp.push(data.returnUsers[i]);
}
self.returnUsers = temp;
}
}, "json");
alert(this.returnUsers);
}
}
A pesar de que la función retrieve()
habrá terminado para cuando la devolución de llamada Ajax es ejecutar el La magia de los cierres de JavaScript significa que la función anónima interna aún tiene acceso a esas variables locales.
Ambas preguntas se repiten muchas veces en este sitio, puede encontrar una respuesta a ambas si realiza una búsqueda (y ambas se deben formular como preguntas separadas de todos modos). –
Bien, jefe, sé las reglas sobre la búsqueda, pero es una pregunta apresurada, así que volví a preguntar por ti – Abyss