Partage
  • Partager sur Facebook
  • Partager sur Twitter

Variable globale

Un pb avec jquery ?

Sujet résolu
    6 octobre 2009 à 19:13:08

    Bonjour à tous,
    Je suis en train de me pencher sur le jquery et je développe un formulaire qui doit s'autovérifier avant de se valider. Mon problème c'est que j'utilise ajax pour controler la variable d'url par exemple.

    Et je voudrais pouvoir agir sur une variable en dehors d'une fonction : exemple :

    $(document).ready(function() {
                    $("#submit").click(function(){
                        valid = true;
                        if($("#url").val() == "") {
                        $("#url").next(".error_message").fadeIn().text("Veuillez remplir le champ Url");
    			valid = false;
    	            }
    	            else {
    		        $.ajax({
    			  type: "POST",
    			  url: "ajax/get_double_url.php",
    			  data: "url="+$("#url").val(),
                              success: function(msg){
                                if(msg>0) {
                                	$("#url").next(".error_message").fadeIn().text("L url est déja inscrite sur notre annuaire (validée ou refusée)");
                                	window.valid = false;                        		
    			    }                            	
                              }
    		    });				
                    }
                    return valid;
                    });
        	        });
    


    Mon problème c'est que dans la fonction de retour de l'ajax, (success), mon valid = false ne marche pas, je n'arrive pas à changer la valeur de valid.

    Les valeurs retournées par mon script sont ok, juste l'affectation de la variable valid ne marchent pas...

    Un problème avec jquery ? Une idée ?

    Merci d'avance


    Tangooo
    • Partager sur Facebook
    • Partager sur Twitter
      7 octobre 2009 à 8:24:53

      window.valid n'est pas la même variable que valid de la fonction...
      • Partager sur Facebook
      • Partager sur Twitter
        7 octobre 2009 à 12:01:11

        C'était un test parce qu'apparemment window correspondait aux variables définies en dehors des fonctions.

        Mais en fait j'ai trouvé la solution. Pour ceux que ça intéresse c'est tout simple. Dans ce cas là, on récupère un résultat depuis une fonction ajax, or par défaut les requêtes sont asynchrones. Donc on n'attend pas le résultat pour terminer la fonction de validation du formulaire.

        La solution consiste à dire à la requete ajax d'être synchrone, pour qu'on obtienne le résultat avant de continuer la vérification du reste du formulaire.

        $.ajax({
        async : false,
        ...
        });


        Tangooo
        • Partager sur Facebook
        • Partager sur Twitter
          7 octobre 2009 à 12:50:24

          Je suis pas sûr que l'AJAX synchrone soit cross-browser, mais bon...
          Pense à mettre ton sujet en résolu à l'aide du lien en bas de page ;)
          • Partager sur Facebook
          • Partager sur Twitter
            7 octobre 2009 à 14:33:18

            Pour l'instant, la solution synchrone fonctionne sous IE6,7,8, Firefox, Opera, Safari. Je viens de tester.

            Après les autres navigateurs, je les néglige, donc la solution me convient.


            Tangooo.
            • Partager sur Facebook
            • Partager sur Twitter
              7 octobre 2009 à 14:38:16

              Le synchrone marche partout mais est fortement déconseillé, ça peut entrainer de sérieux lag si on l'utilise trop
              • Partager sur Facebook
              • Partager sur Twitter
                7 octobre 2009 à 15:43:34

                Bien entendu, je l'utilise avec parcimonie, et de toute façon tu peux mettre un timeout aux requetes synchrones avec jquery :) Donc même si pour une raison indéfinie elle plante, le timeout gère ça.

                Tangooo.
                • Partager sur Facebook
                • Partager sur Twitter

                Variable globale

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown