IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Délai de réponse


Sujet :

jQuery

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 428
    Points : 123
    Points
    123
    Par défaut Délai de réponse
    Bonjour,

    Je rencontre actuellement un problème en faisant de l'Ajax en jquery.
    Je m'explique j'ai déjà réussit à faire de l'Ajax sans jquery et il y avait une fonction qui bouclait en écoutant la réponse du serveur.

    La dans mon cas je valide un formulaire qui appel une fonction pour contrôler les champs. Si mon champs est bon je met le marqueur associé à true sinon a false, et a la fin de la fonction je vérifie que tout mes marqueur soient a true.

    Bon dans ma fonction je fait appel a une fonction PHP de contrôle "contraole_tva()" d'ou mon besoin d'Ajax, seulement la premier fonction "controle_all_champ()" se termine avant d'avoir que "controle_tva()" est renvoyé la réponse et changer le marqueur donc forcement tous mes marqueurs ne sont pas a true comme ils devraient l'être.

    je vous comme la partie qui contrôle la tva qui se trouve dans "controle_all_champ()" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    if($("#numTvaIntra").val() == "")		{
    			$("#numTvaIntra").css({borderColor:"red"});
    			alert('Veuillez remplir le champ TVA Intracommunautaire !!');
    			juste7 = false;
    		}
    		else	{
                        if(control_TVA() == true)                    {
                            $("#numTvaIntra").css({border:"1px ridge #7F9DB9"});
    			juste7 = true;
                        }
                        else                    {
                            $("#numTvaIntra").css({borderColor:"red"});
    			alert('Champ TVA Intracommunautaire non valide!!');
    			juste7 = false;
                        }
    		}
    Ainsi que la fonction qui utilise l'Ajax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    function control_TVA()	{
                alert('je suis dedans');
                var resultat = false;
                $.ajax
                (
                    {
                        type: 'GET',
                        url: 'getVat.php?vat_number='+$("#numTvaIntra").val(),
                        timeout: 30000,
                        success: function(data) 
                            {
                                alert('on a un data');
                                if(data.valid == 1)
                                {
                                    resultat = true;
                                }
                                else
                                {
                                    resultat = false;
                                }
                            },
                        error: function() 
                            {
                                alert('La requête n\'a pas abouti'); 
                            }
                    }
                );    
         alert('tototototot');
                    return resultat;
    	}
    Pouvez-vous m'aider?
    Je vous remercie d'avance pour vos lumières.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Es-tu sûr d'avoir bien compris la notion de requête asynchrone, qui est la base d'AJAX ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre averti Avatar de hariman
    Homme Profil pro
    Développeur Java, Android
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Développeur Java, Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Points : 413
    Points
    413
    Par défaut
    Bonjour,

    Les fonctions anonymes passées en paramètre à la méthode ajax() (success et error) sont exécutées en asynchrone, donc on ne sait pas quand la variable resultat va être assigné.
    Une solution que je suggère: faudrait que tu mettes les instructions de controle_all_champ() DANS ces fonctions anonymes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
                      success: function(data) 
                            {
                                alert('on a un data');
                                if(data.valid == 1)
                                {
                                    $("#numTvaIntra").css({border:"1px ridge #7F9DB9"});
    			        juste7 = true;
                                }
                                else
                                {
                                    $("#numTvaIntra").css({borderColor:"red"});
    			        alert('Champ TVA Intracommunautaire non valide!!');
    			        juste7 = false;
                                }
                            },
    Les boutons et adorent être cliqués, donc ne les oubliez pas

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 428
    Points : 123
    Points
    123
    Par défaut
    Bonjour,
    pour asynchrone, je pense que oui, pour moi le code js est exécuté mais n'attend pas la réponse du serveur php, contrairement au php qui exécute fonction par fonction en attendant la réponse de chacune avant de continuer.

    en ce qui concerne la fonction anonyme je ne comprend pas bien ce que cela changera pouvez vous m'expliquer?
    Je vous remercie d'avance pour vos lumières.

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par darkterreur
    pour asynchrone, je pense que oui
    Ta fonction control_TVA() semble pourtant montrer que non... A quoi peut bien servir le return resultat; dans ce cas ?

    Le plus simple pour toi (mais pas forcément le plus propre) serait de faire une requête synchrone.
    Le plus propre (selon moi) serait, comme le suggère hariman, de revoir ta conception...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre averti Avatar de hariman
    Homme Profil pro
    Développeur Java, Android
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Développeur Java, Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Points : 413
    Points
    413
    Par défaut
    Ces fonctions anonymes sont appelées après la réception de la réponse de la requête ajax, donc la ligne "return resultat;" à la fin de "control_TVA()" est exécutée AVANT l'arrivée de la réponse (dans la majorité des cas).
    Le moyen le plus propre est celui que je viens de poster.
    Les boutons et adorent être cliqués, donc ne les oubliez pas

  7. #7
    Membre averti Avatar de hariman
    Homme Profil pro
    Développeur Java, Android
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Développeur Java, Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Points : 413
    Points
    413
    Par défaut
    Bovino,

    Tu arrives toujours à poster tes réponses avant les miennes
    Les boutons et adorent être cliqués, donc ne les oubliez pas

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 428
    Points : 123
    Points
    123
    Par défaut
    merci pour vos informations
    maintenant dans le cadre que vous avez décrit, si j'ai deux contrôle appelé en ajax.
    Votre situation, fonctionne bien avec un mais pour deux?

    je peux peut être créer une fonctionne qui exécute mes deux ajax, mais je ne peux pas appeler la fonction contrôle global ensuite pour les deux retour de réponse de la requête.

    ou peut être que j'ai rien comprit?
    Je vous remercie d'avance pour vos lumières.

  9. #9
    Membre averti Avatar de hariman
    Homme Profil pro
    Développeur Java, Android
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Développeur Java, Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Points : 413
    Points
    413
    Par défaut
    hmmm, difficile.
    Est-ce que c'est vraiment nécessaire de séparer les contrôles ?
    Les boutons et adorent être cliqués, donc ne les oubliez pas

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 428
    Points : 123
    Points
    123
    Par défaut
    C'est a dire qu'il s'agit de deux champs bien différent tel que le numéro de TVA intracommunautaire et le numéro de Siret par exemple.
    Il existe des algorithme qui permettent de contrôler si les numéro sont bon.

    j'ai donc deux fonction en php qui fonctionnent et je désire les appeler en ajax
    je ne suis pas sur qu'il soit possible d’appeler deux fonction différentes avec la même procédure ajax tout en passant des paramètre différente, et en attendant bien sur une réponse pour les deux.

    En gros vrai ou faux.
    Je vous remercie d'avance pour vos lumières.

  11. #11
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    On peut enchaîner des transactions AJAX.

    Comment dois-je formuler une requête AJAX ?

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    var x = 24,
    	y = 42;
     
    $.get( "premier.php", { "x" : x, "y" : y }, function( data, textStatus, jqXHR ){
    	// console.log( data, textStatus, jqXHR );
    	// succès de la transaction, on doit traiter le contenu de data
     
    	$.get( "second.php", { "truc" : data.truc }, function( data2, textStatus, jqXHR) {
    		// console.log( data2, textStatus, jqXHR );
    		// succès de la transaction, on doit traiter le contenu de data2
     
    	}).error( function( jqXHR, textStatus, errorThrown ){
    		// console.log( jqXHR, textStatus, errorThrown );
    		// échec de la transaction, gérer la catastrophe
     
    	});
     
    }).error( function( jqXHR, textStatus, errorThrown ){
    	// console.log( jqXHR, textStatus, errorThrown );
    	// échec de la transaction, gérer la catastrophe
     
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 428
    Points : 123
    Points
    123
    Par défaut
    Ha merci je vais faire des tests,

    mais votre syntaxe n'est pas la même que j'utilise, ma syntaxe est'elle mauvaise?

    En js classique il y avais une fonction qui permettait de boucler jusqu’à ce que le serveur répond. Dans votre syntaxe, qu'est ce qui permet d'attendre la réponse?
    Je vous remercie d'avance pour vos lumières.

  13. #13
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    La seconde transaction débute si et seulement si la première est un succès.

    Comme je l'explique dans la FAQ, les méthodes $.get(), $.post(), $.getJSON(), $.getScript() et $(selector).load() exécutent la majorité des transactions AJAX dont vous aurez besoin. Toutes ces méthodes AJAX (sauf load) retournent un objet jqXHR qui implémente l'interface Promise. Pour des cas particuliers, les initiés utiliseront $.ajax().

    Les explications et les codes donnés dans la FAQ sont toujours vrais et utilisables, mais l'exemple de code est devenu obsolète avec jQuery 1.8.

    Deprecation Notice: The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callbacks will be deprecated in jQuery 1.8. To prepare your code for their eventual removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // Avec jQuery 1.8.0 et +
     
    var x = 24,
        y = 42;
     
    $.get( "premier.php", { "x" : x, "y" : y } )
    	.done( function( data, textStatus, jqXHR ){
    		console.log( "done : data = ", data, "\ntextStatus = " ,textStatus, "\njqXHR = ", jqXHR ); 
     
    		// succès de la transaction, traité le contenu de data
     
    	})
    	.fail( function( jqXHR, textStatus, errorThrown ){ 
    		console.log( "fail : jqXHR = ", jqXHR, "\ntextStatus = " ,textStatus, "\nerrorThrown = ", errorThrown );
     
    		// échec de la transaction, gèrer la catastrophe
     
    	});

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

Discussions similaires

  1. Délai de réponse d'un joueur.
    Par MCL33 dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 05/11/2012, 13h30
  2. [1.x] délai de réponse ahurissant
    Par erictomcat dans le forum Symfony
    Réponses: 24
    Dernier message: 11/01/2011, 13h17
  3. délai de réponse après postulation
    Par Enohra dans le forum Contrat
    Réponses: 3
    Dernier message: 10/05/2009, 20h01
  4. [Turbo Pascal] Introduire un délai de réponse
    Par lex001 dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 17/03/2009, 02h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo