getJson problem

Tags:    json javascript

Af en eller anden grund er den lige glad med om json request ikke er "færdig endnu".
Har lavet noget comment i koden der måske kan hjælpe til forståelsen af mit problem.

Fold kodeboks ind/udJScript kode 


Hvis jeg sætter functionen til at return false lige meget hvad kan jeg se at hvis jeg skriver et forkert login kører den:
$('#error').prepend('<p>Ugyldigt login</p>');
$('#error').css("display", "block");

Så hvorfor er den ligeglad med min getJson?



4 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Af en eller anden grund er den lige glad med om json request ikke er "færdig endnu".
Har lavet noget comment i koden der måske kan hjælpe til forståelsen af mit problem.

Fold kodeboks ind/udJScript kode 


Hvis jeg sætter functionen til at return false lige meget hvad kan jeg se at hvis jeg skriver et forkert login kører den:
$('#error').prepend('<p>Ugyldigt login</p>');
$('#error').css("display", "block");

Så hvorfor er den ligeglad med min getJson?


Er det ikke fordi din "error" er i et andet scope, når dit json kommer tilbage er det jo en callback, og det er asynkront, det vil sige at din javascript er afviklet og væk? Kender ikke så meget til javascript, men det lyder fornuftigt i mine ører.



Brian har ret. Det er fordi kaldet er asynkront. Det vil sige at "if (error)" evalueres før "function(response)". Retursvaret fra getJSON bliver faktisk først evalueret når checkLogin() er afsluttet.
Du skal også være opmærksom på at dine variabler error, email og password deklareres i global scope. brug "var error = false" for at deklarere i local scope.



Så hvad skal jeg gøre?
Overvejede at bruge ajax i stedet men så så jeg:

By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active. As of jQuery 1.8, the use of async: false is deprecated.




jQuery getJson er Ajax. Det er fint nok det du gør men kunne være en idé at omstrukturere det lidt.

Eksempel: I stedet for den checkLogin funktion du har nu så del det op i i validering og login-forsøg. Så du tjekker om felterne er gyldige hvis de er sender du en forespørsel til serveren.
Fold kodeboks ind/udJScript kode 


I jsonLogin laver du kaldet kaldet til jQuery.getJson i din handlerfunktion tjekker du som om login'net er gyldigt.

Sådan kunn funktionerne f.eks. se ud:
Fold kodeboks ind/udJScript kode 




Indlæg senest redigeret d. 25.06.2012 15:02 af Bruger #14645
t