7
votes

JQUERY GETJSON Fonction Timing problème

Je pense que mon programme saute le résultat de l'appel JSON. Est-il possible de faire une fonction de fermeture ici ou d'attendre le programme pour que l'appel JSON soit revenir? XXX


2 commentaires

Vous voulez que la fonction USERNAME_NOT_DUPLILE attendue jusqu'à ce que l'appel Getjson se termine?


besoin de voir get_functions.php. Pendant ce temps, utilisez Firebug pour surveiller ce qui est retourné pour que c'est une booléenne nue, que je doute, ALTHO Vous utilisez le retour comme s'il s'agissait


4 Réponses :


1
votes

Yeap, USERNAME_NOT_DUplicate Il suffit de renvoyer false immédiatement car getjson est asynchrone (c.-à-d. Non-blocage). L'instruction VRAI vient simplement renvoie true à partir du gestionnaire de réponse. Normalement, vous ne devriez pas faire des appels aussi bloquants que vous essayez d'atteindre. Je suppose que vous pouvez envisager de vous souvenir d'un état de la demande dans le monde entier.


3 commentaires

Puis-je faire getjson non synchrone?


@bob - Nope. Serait une bonne option pour JQuery à ajouter cependant.


@bob $. getjson est un simple raccourci d'un équivalent $. Ajax fonction, qui permet d'envoyer des demandes synchrones. Voir ASYNC Réglage de API.JQUERY.com/JQUERY.AJAX. Alors ... la réponse est 'Oui, pas $. Getjson mais $. Ajax '



13
votes

Le $. getjson () L'appel de l'API est asynchrone. Vous pouvez le rendre synchronisé en utilisant $. Ajax () de cette façon: xxx


1 commentaires

Une partie clé de cela pour moi était le var rslt = false; J'essayais de retourner vrai / faux de l'intérieur du succès: qui ne retournait pas de Bool de la fonction.



3
votes

La réponse de Drew est presque parfaite, il manque simplement un support et une virgule pour IE.

function username_not_duplicate(username) {
   var function_name = "get_username"; 
   var parameters = [username]; 
   var url = "camps/includes/get_functions.php?function_name=" + function_name + "&parameters=" + parameters;
   var rslt = false; 
   $.ajax({ 
         async: false, 
         url: url, 
         dataType: "json", 
         success: function(data) {
           if (data == true) {                   
             rslt = true; 
           }
        }, 
    });
    return rslt; 
}


0 commentaires

3
votes

Un autre choix consiste à utiliser une fonction de rappel et à transmettre à la fonction qui exécute Getjson comme: xxx

de cette façon, votre fonction de rappel sera appelée à la fin de l'appel Getjson. .


0 commentaires