11521 sujets

JavaScript, DOM et API Web HTML5

Je rencontre un problème avec mon code Javascript / Jquery.

Je n'arrive pas à comprendre pourquoi ça ne fonctionne pas.

Voici mon code :

function Gallery(idGallery){
      
     this.idGallery  = idGallery;
     /*idGallery vaut 12*/
     console.log("valeur idGallery"+idGallery);
      
     this.loadImg = function(){
          fullUrl = constantes("ajax")+"?fonction=pageGallery&idGal="+this.idGallery;
          this.idGallery  = 8;
          /*idGallery vaut 8*/
          console.log("valeur idGallery dans loadImg "+this.idGallery);
          that = this;
          $.getJSON(fullUrl).done(this.loadImageCallback);
          /*this.idGallery vaut 8, pourquoi je ne récupère pas la valeur modifié dans loadImageCallback (6), je croyais
           * la variable that contenait la référence de mon instance de this et donc que le récupérerai ma valeur modifié */
           console.log("valeur this.idGallery  après callback => "+this.idGallery);
           this.loadImageCallback = function(data){
           /*idGallery vaut 8*/
           console.log("valeur de that.idGallery "+that.idGallery);
           that.idGallery = 6;
           /*idGallery vaut bien 6*/
           console.log("changement valeur pour stocker 6 ->"+ that.idGallery);
         
        }
    }
     
    aGallery = new Gallery(12);


Donc comme indiqué, je ne comprends pas pourquoi je ne récupère pas la valeur que j'ai modifié dans loadImageCallback

Merci beaucoup d'avance pour vos lumières Smiley cligne
Modérateur
Salut,


Bon déjà il manque une accolade fermante sur ta fonction Gallery.

Ensuite je pense que tu t’embête avec plein tes this et tes variable. Et je ne pense pas qu'il faille inclure les fonctions les unes dans les autres comme ça...

La fonction loadImg est inutile, autant mettre el code directement dans Gallery et la fonction de callback doit etre mise hors de la fonction je pense.

J'ai aussi du mal a voir ce que tu fais avec ton idGallery... tu le récupères mais tu le force à 8 après l’avoir inclus dans fullUrl... tu pourrais expliquer un peu ce que tu veux faire ??

J'ai beau relire et trifouiller le code j'arrive pas à comprendre. Je pense que tu te complique beaucoup la tache... essaie de nous décrire ce que tu veux que ca fasse (et ce que fait l'ajax aussi ca on peut pas tester)
Modifié par _laurent (14 Mar 2017 - 10:54)
Bonjour,

Merci d'avoir répondu à ma question Smiley smile .

Effectivement, dans la précipitation, je ne pense pas avoir été clair du tout.
Je m'en excuse.
Je reprends :

J'ai un objet Gallery. Celui-ci à dans ses propriétés, un id de galerie et un tableau Array vide.
L'objectif est de récupérer les images d'un dossier.
Quand j'arrive sur ma page html (et php), je récupère l'id de la galerie à afficher.

L'objet Gallery a la fonction loadImg : ce code va lancer une requete ajax et récupérer les images de mon dossier.
Une fois récupéré, j'exécute ma fonction de callback qui va ajouter dans la variable de type Array, mes images récupérés de ma callback.

Les "this" correspondent à l'instance ou je me trouve.

Précisément, je n'arrivais pas à mettre à jour mon tableau dans ma fonction de callback, mais en utilisant la fonction apply, d'après ce que j'ai pu comprendre, permet d'envoyer la valeur de this à ma fonction loadImageCallback.

Donc ça fonctionne.
Je mets à jour le code et bien sûr si vous avez des conseils sur mon code, je suis preneur Smiley smile .
Je n’essaie pas de faire un code complexe mais je veux qu'il soit réutilisable sur plusieurs projets.

Cordialement.


 function Gallery(idGallery){
        
        this.idGallery  = idGallery;
        this.arrImg     = new Array();
        
       this.loadImg = function(){
            fullUrl = constantes("ajax")+"?fonction=pageGallery&idGal="+this.idGallery+"&nbrImg=10"+this.nbrImg+"&imgActu=";
            $.getJSON(fullUrl).done(this.loadImageCallback);
            
            this.loadImageCallback.apply(this);
           
            console.log("valeur tableau "+this.arrImg[0]);
        }
        this.loadImageCallback = function(data){
           this.arrImg.push("nouvelle Image");
        }
    }
    
    aGallery = new Gallery(12);
    aGallery.loadImg("");


Modifié par yinyin76 (14 Mar 2017 - 11:56)
Modérateur
Mmmmm....


Si je reprends bien avec un id ici 12 vous voulez récupérer une array avec les images renvoyé par le Json.

Si je ne me trompe pas le simple code :
function Gallery(idGallery, nbrImg){
  var fullUrl = constantes("ajax")+"?fonction=pageGallery&idGal="+idGallery+"&nbrImg=10"+nbrImg+"&imgActu=";
  $.getJSON(fullUrl).done(function(data) {
  	console.log(data);
  });
}
 
aGallery = new Gallery(12, 1);


Va afficher la liste des images recu en Json. Il suffit à la plce du console.log de faire une each sur un tableau pour en faire une array ?

(au passage il manquait la variable nbrImg qu'on a pas sur cette partie du code)
Modérateur
Ha j'avais pas vu que ça marchais maintenant. Tant mieux du coup (même si je trouve le code vachement compliqué pour juste faire une array avec un json Hahaha) Smiley biggrin

Bonne journee