6
votes

Ajax JQuery Async Valeur de retour Async

Comment puis-je faire ce code pour renvoyer la valeur sans geler le navigateur strong>.
Vous pouvez réécrire cela avec une nouvelle méthode bien sûr.

function get_char_val(merk)
{  
    var returnValue = null;
    $.ajax({   
                type:       "POST",
                async:      false,   
                url:            "char_info2.php",   
                data:   { name: merk },   
                dataType: "html",  
                success:    function(data)
                                    {
                                        returnValue = data;
                                    } 
        }); 
    return returnValue;
}
var px= get_char_val('x');
var py= get_char_val('y');


3 commentaires

J'ai ajouté une importance apparemment nécessaire.


J'ai vu cette question (ou une variante) d'innombrables fois. Il doit y avoir des piles sans fin de duplicats. Si seules les personnes pouvaient lire un peu plus sur la programmation avec des événements asynchrones avant d'essayer d'utiliser Ajax ou toute autre API / langage ASYNC ...


Ou au moins comprendre ce que le mot asynchrone signifie.


3 Réponses :


1
votes

Vous ne pouvez pas faire de missions variables de cette façon (Async). Vous devez définir les variables dans le gestionnaire . XXX

Une fois que toutes les récupérations sont terminées, vous pouvez accéder aux variables X et Y à l'aide de VariaBeRray [ x] et variadedray [y]


6 commentaires

jamais Utiliser async: false .


SRY J'en ai besoin d'un autre pour obtenir de la valeur parce que j'ai eu 20 autres variables pour définir


Ensuite, vous devrez trouver un tableau (peut-être avec des clés telles que px et py ) et avoir le gestionnaire de succès gérer cela comme: variableRray [Merk ] = données;


@Slaks, ne faisait que re-coller. Bonne prise.


Cela devrait être un objet, pas un tableau.


Un tableau est un objet utilisé pour ce genre de chose. Quels sont les avantages à utiliser un objet personnalisé à la place?



14
votes

Ce n'est pas possible.
JavaScript passe sur le fil de l'interface utilisateur; Si votre code attend que le serveur réponde, le navigateur doit rester gelé.

Au lieu de cela, vous devez renvoyer la valeur à l'aide d'un rappel: P>

function get_char_val(merk, callback)
{  
    var returnValue = null;
    $.ajax({   
                type:       "POST",
                url:            "char_info2.php",   
                data:   { name: merk },   
                dataType: "html",  
                success:    function(data) {
                    callback(data);
                } 
        }); 
}

get_char_val('x', function(px) { ... });
get_char_val('y', function(py) { ... });


10 commentaires

Correct, vous ne pouvez pas utiliser techniquement une valeur de retour dans une demande asynchrone car le flux de programme a déjà passé le point d'un "retour" de la première méthode au moment de l'arrivée de la réponse.


Mais ce que je devrais entrer dans la fonction intérieure (px) {<< ici >>}


@Sonny: Quoi que tu veux. C'est le rappel qui reçoit la valeur.


@Slaks donc je n'ai pas besoin d'entrer quelque chose là-bas?


@Sonny: Si vous ne voulez rien faire avec la réponse, oui. Comprenez-vous ce que ce code fait?


@Sonny: C'est parce que c'est asynchrone . Il n'y a pas de trappe d'évacuation magique; Vous devez tout faire dans les rappels. Changer la conception pour utiliser une seule demande AJAX le fera beaucoup plus simple plus simple.


@Slaks ok je ferai ça, mais ça va causer beaucoup de retards dans mon jeu, c'est tout autre moyen de le faire comme un autre module JS comme Super Jquery.js


@Sonny: Non. Il n'y a pas de trappe d'évacuation magique. Personne n'a dit que Ajax est facile. Pourquoi cela causerait-il un retard?


@Slaks à cause de beaucoup de données que je pense.


@Slaks j'ai fait une nouvelle question, je pense que vous serez intéressé Stackoverflow.com/Questtions/4555508/...



0
votes

Cela peut ne pas être ce que vous attendez, mais vous pouvez définir ASYNC: true si vous ne voulez pas faire une pause dans le navigateur et que vous voulez donc faire avec px sur le succès


0 commentaires