Ho un piccolo problema qui ragazzi. Sto cercando di implementare il seguente scenario:
- un utente apre la home page e vede un elenco di altri utenti e scatta di aggiungere uno alla sua lista amico.
- Invio una richiesta Ajax a una risorsa server per convalidare se l'utente è connesso, in tal caso, invio un'altra richiesta ajax a un'altra risorsa server per aggiungerla effettivamente all'elenco di amici dell'utente.
Suoni semplici? Ecco cosa ho fatto: ho creato una funzione isLoggedIn
che emetterà la prima richiesta al server al fine di determinare se l'utente è loggato. Emetto questa richiesta usando il metodo jQuery.ajax
. Ecco la mia funzione è simile:
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;
}
});
}
La restituito JSON è molto semplice, esso appare come il seguente:
{ LoggedIn: true } or { LoggedIn : false }
Ora questo metodo, in realtà funziona e visualizza l'avviso correttamente: JsonData = true
se effettuato l'accesso, . e JsonData = false
se non registrati in Fino a questo punto non c'è nessun problema, il problema si verifica quando si tenta di chiamare questo metodo: io lo chiamo in questo modo:
$(".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;
});
La chiamata isLoggedIn
restituisce sempre false
e restituisce 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: false`!
A quanto pare funziona ancora in modo asincrono, però. Cosa mi manca qui ragazzi?
cosa importa se si specifica '{async:" false "}' vs. '{async: false}'? –
@Cory Larson No, non importa, il fatto è che il metodo restituisce false prima che la richiesta ajax sia completata. – Galilyou