Mam tu mały problem. Próbuję zaimplementować następujący scenariusz:
- użytkownik otwiera stronę główną i widzi listę innych użytkowników i kliknięć dodać jeden na liście jego przyjacielem.
- Wystawiam żądanie Ajax do zasobu serwera w celu sprawdzenia, czy użytkownik jest zalogowany, jeśli tak, to ja wysyłam kolejne żądanie ajax do innego serwera , aby dodać go do listy znajomych użytkownika.
Brzmi prosto? Oto, co zrobiłem: Stworzyłem funkcję isLoggedIn
, która wyda pierwsze żądanie do serwera w celu ustalenia, czy użytkownik jest zalogowany. Wyślę to żądanie, używając metody jQuery.ajax
. Oto moja funkcja wygląda następująco:
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;
}
});
}
Zwracany JSON jest bardzo prosta, to wygląda następująco:
{ LoggedIn: true } or { LoggedIn : false }
Teraz ta metoda rzeczywiście działa i wyświetla alert poprawnie: JsonData = true
jeśli zalogowany, . i JsonData = false
jeśli nie zalogowany do tej pory nie ma żadnego problemu, problem pojawia się przy próbie wywołania tej metody: ja nazywam to tak:
$(".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;
});
Wywołanie zawsze zwraca false
i zwraca 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`!
Wygląda jednak na to, że nadal działa asynchronicznie. Czego mi tu brakuje?
to ma znaczenie, jeśli podasz '{async:" false "}' vs. '{async: false}'? –
@Cory Larson Nie, to nie ma znaczenia, chodzi o to, że metoda zwraca wartość false, zanim żądanie ajax zostanie zakończone. – Galilyou