asp.net mvc - peticiones - La solicitud $.ajax({async: false}) aún se activa de forma asíncrona.
jquery ajax mvc controller (1)
Necesita async:false
, no async:"false"
. (es decir, pase booleano false
, no cadena "false"
).
Editar: también con las solicitudes de sincronización, debe devolver un valor después de la llamada a ajax
, no dentro de su controlador de éxito:
function isLoggedIn() {
var isLoggedIn;
$.ajax({
async: false,
// ...
success: function(jsonData) {
isLoggedIn = jsonData.LoggedIn
}
});
return isLoggedIn
}
Tengo un pequeño problema aquí chicos. Estoy tratando de implementar el siguiente escenario:
- Un usuario abre la página de inicio y ve una lista de otros usuarios y clics para agregar uno a su lista de amigos.
- Emití una solicitud de Ajax a un recurso del servidor para validar si el usuario está conectado, de ser así, publico otra solicitud ajax a otro recurso del servidor para que realmente lo agregue a la lista de amigos del usuario.
Suena simple? Esto es lo que hice: isLoggedIn
una función isLoggedIn
que emitirá la primera solicitud al servidor para determinar si el usuario está conectado. jQuery.ajax
esta solicitud usando el método jQuery.ajax
. Aquí está mi función se ve así:
function isLoggedIn() {
$.ajax({
async: "false",
type: "GET",
contentType: "application/json; charset=utf-8",
dataType: "json",
url: "/isloggedin",
success: function(jsonData) {
alert("jsonData =" + jsonData.LoggedIn);
return jsonData.LoggedIn;
}
});
}
El JSON devuelto es muy simple, se ve así:
{ LoggedIn: true } or { LoggedIn : false }
Ahora, este método funciona y muestra la alerta correctamente: JsonData = true
si está conectado, y JsonData = false
si no está conectado. Hasta este momento no hay problema, el problema ocurre cuando intento llamar a este método: lo llamo al igual que:
$(".friend_set .img").click(function() {
debugger;
if (isLoggedIn()) {
alert("alredy logged in");
trackAsync();
popupNum = 6;
}
else {
alert("not logged in"); //always displays this message.
popupNum = 1;
}
//centering with css
centerPopup(popupNum);
//load popup
loadPopup(popupNum);
return false;
});
Llamar a isLoggedIn
siempre devuelve false
, y devuelve false before the ajax request finishes (because the message
jsonData = true is displayed after the message "not logged in". I made sure that the request is **NOT** Asynchronous by stating
async: falso`!
Aparentemente, todavía está trabajando de forma asíncrona. ¿Qué me estoy perdiendo aquí chicos?