Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Jquery] Casse tête

    24 mars 2011 à 1:07:00

    Bonsoir,

    Je viens vers vous car je commence à m'arracher les cheveux. J'utilise cakephp et jquery et la je développe donc un petit truc avec jquery, mais je suis confronté à un sérieux problème que je n'arrive pas à résoudre.

    Comment récupérer la valeur d'une variable d'url sur un liens non visité avec jquery ?

    En effet je souhaites pouvoir récuperer la valeur d'une variable d'url (d) lorsque je clique sur mon lien, mais comment faire, comment y accéder ? La seule chose que je sais c'est que le lien dont je parles correspond à "this.href".

    Dans l'attente de vos idées, cordialement !
    • Partager sur Facebook
    • Partager sur Twitter
      24 mars 2011 à 1:16:53

      Le href est une simple chaîne de caractères. Avec les méthodes des chaînes du JS, tu peux extraire ce que tu veux comme données dans la querystring.

      Un substring basé sur un indexOf('?') puis un split('&') ou split(/&=/) par exemple...
      • Partager sur Facebook
      • Partager sur Twitter
        24 mars 2011 à 9:50:07

        Merci pour l'info golmote j'ai finalement réussi à récuperer ce que je voulais de ce coté.

        Néanmoins j'ai un autre soucis, je suis dans l'impossibilité de transmettre des variables, que ce soit en GET ou POST, je ne sais pas si je fais ce qu'il faut mais j'ai toujours des variables indéfinie quand je les appelles en php.

        Voici mon code :

        $(function() {
            $(".ajax-del").live("click", function() {
                //var id = this.href.split("=");
                $.post(
                    "/assistances/supprimer",
                    { name: "jean" },
                    error:function(msg){
                        alert( "Error !: " + msg );
                    },
                    success:function(data){
                        //affiche le contenu du fichier dans le conteneur dédié
                        $('#page_de_contenu').load('/assistances/view');
                    });
                });
        });
        


        J'ai beau essayer avec $.get, $.post ou bien $.ajax j'ai toujours le même soucis, quand j'appel (comme par exemple ici) $_POST['name'] en php c'est une variable indéfinie que j'ai.

        Une idée, je tourne en rond :s ^^.

        Cordialement
        • Partager sur Facebook
        • Partager sur Twitter
          24 mars 2011 à 14:22:21

          Que renvoies tu en php ?
          • Partager sur Facebook
          • Partager sur Twitter
            24 mars 2011 à 19:56:33

            Pourquoi utilises-tu load() ligne 12, surtout...
            • Partager sur Facebook
            • Partager sur Twitter
              24 mars 2011 à 20:43:20

              Bonsoir,

              Mon plus gros soucis etant de transmettre des variables a mon action supprimer, dans mon action je fais un debug() sur mon tableaux $_POST pour voir s'il contient quoi que ce soit.

              J'utilise load() ligne 12 car je souhaites charger ce que renvoi mon action view du controlleur assistances dans mon div, je ne sais pas si cest la bonne fonction pour cela mais je n'ai pas trouve ce que je voulais a ce niveau.

              Cdlt, sam.
              • Partager sur Facebook
              • Partager sur Twitter
                24 mars 2011 à 22:29:30

                Il faut que tu utilises le paramètre data. Pas load().

                load() va tenter de charger le contenu en effectuant une nouvelle requête Ajax... qui n'aura aucun paramètre, elle.

                EDIT : Ou alors tu utilises load() directement à la place de post()... (mais les données seront envoyées en get)
                • Partager sur Facebook
                • Partager sur Twitter
                  24 mars 2011 à 22:31:08

                  Je dois l'utiliser comment data ? Au passage, comment récuperer mes données POST dans mon controlleur ? Est-ce possible d'abord d'utiliser un lien du type "/controlleur/action" dans la fonction $.post ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 mars 2011 à 22:33:24

                    Si t'as un rerouting fonctionnel, le lien controlleur/action devrait rediriger au bon endroit.

                    Pour ce qui est de récupérer tes données POST, tu dois pouvoir le faire avec $_POST... ou avec une fonction que ton framework serveur propose... M'enfin c'est pas du JS ça.

                    EDIT : Si tu remplaces ta ligne 12 par alert(data); par exemple. La boîte de dialogue affiche-t-elle le retour souhaité ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 mars 2011 à 22:41:28

                      Petit détail au passage, je veux envoyer une données en post à mon action "supprimer" mais je veux en revanche ré-afficher ce que renvoie mon action "view".

                      Concernant le aler(), si je remplace avec le code que j'ai actuellement, il ne se passe rien, je suis envoyé sur /assistances/supprimer
                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 mars 2011 à 22:45:09

                        Ajoute un return false; entre les lignes 13 et 14.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 mars 2011 à 22:52:07

                          Bon bon bon, on tient le bon bout, j'avais zappé deux ou trois trucs donc ça ne pouvait pas marché, dans l'état actuel des choses une fenetres de dialogue m'affiche le contenu que renvoit mon action "supprimer" (et je vois bien ma variable post). Ce que je souhaites donc faire moi c'est appeler "supprimer" et réinjecter "view" dans mon div #page_de_contenu
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 mars 2011 à 22:54:39

                            Bah que tu charges ta vue view ...
                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 mars 2011 à 22:58:02

                              Bon j'obtiens le résultat escompté avec ce code :

                              $(function() {
                                  $(".ajax-del").live("click", function() {
                                      var content_href = $(this).attr('href');
                                      var param_regex = /[^=]*$/gi;
                                      var val_param = content_href.match(param_regex)[0]; /* valeur du paramètre */
                                      $.post(
                                          "/assistances/supprimer",
                                          { d: val_param },
                                          function(data){
                                              //affiche le contenu du fichier dans le conteneur dédié
                                              $("#page_de_contenu").load("/assistances/view");
                                          });
                                      return false;
                                      });
                              });
                              


                              Sauf qu'après avoir cliqué quand j'inspecte ma source je n'ai que le contenu de mon div de présent (même problème qu'au début), quelle fonction permet donc d'inclure "/assistances/view" comme je le souhaites sans écraser l'intégralité de la page mais simplement en remplaçant le contenu de mon div ?
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 mars 2011 à 23:07:43

                                Pas compris, tu dis que ça marche... mais que ça marche pas ? o_O

                                Si tu regardes la source, tu ne verras pas le code généré par le JS.
                                Pour ça, il faut un inspecteur DOM (comme Firebug par exemple sous Firefox)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 mars 2011 à 23:09:41

                                  Visuellement ça marche, mais j'ai un peu peur du fonctionnement, avant le clique, le code de ma page generée est complet (du doctype jusqu'a la dernière balise), mais une fois que j'ai cliqué et que load() à été appelée en inspectant la source de ma page je n'ai plus rien, juste ce qu'a renvoyé mon load(). La page tiens encore debout car justement c'est un refresh ciblé sur un contenant (mon div) et pas sur la page.

                                  Donc je me poses la question de savoir si c'est normal, et sinon comment faire autrement ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    24 mars 2011 à 23:19:24

                                    Mais où vois-tu que la source a été modifiée ?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 mars 2011 à 23:25:10

                                      En inspectant la source de ma page (CTRL + U)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        25 mars 2011 à 0:04:50

                                        Bah donc comme dit dans un de mes précédents post, la source de la page n'est pas fiable en ce qui concerne l'insertion dynamique de JS.
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        [Jquery] Casse tête

                                        × 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