Problème modification variable globale au sein d'une fonction

Résolu/Fermé
Japply Messages postés 2 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 10 juin 2016 - 10 juin 2016 à 12:12
Japply Messages postés 2 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 10 juin 2016 - 10 juin 2016 à 15:40
Bonjour à tous,

Après plusieurs heures passées à me tirer les cheveux à essayer de comprendre d'où venait mon erreur et comment y répondre, je suis forcé de constaté que j'aurais du mal à résoudre ça sans vous.
Voici la cause de calvitie certaine :

Je récupère un ensemble de données en ajax que j'affiche ensuite sur un dashboard.
Je souhaiterais que la date (timestamp) s'affiche ne vert si elle est de moins de 7 jours, en rouge si elle est de plus de 90 jours (reste normal sinon).

Souhaitant cependant sauvegarder les données brutes dans une variable globale, je stocke celles-ci dès le retour de la requête ajax.

Le problème que je rencontre est, qu'après avoir effectué les modifications sur la date plus tard dans le script, je constate que les modifications ont également été effectuées dans la variable globale ...

Voici mon code (j'ai synthétisé pour être plus rapidement compréhensible) :

var list_global = new Object();

function init(name) {

var request = $.get( 'get_data.php', { type : type, name : name });

request.done(function(data) {

var result = JSON.parse(data);

$.each( result, function(key,value) {

var id = value.id;

var get_elems = $.get("find_elem.php", { id: id });

get_elems.done(function(data1) {

var result = JSON.parse(data1);

list_global['item'] = result;

$.each( result.content, function( key, value ) {

if (value.date) {
value.date = check_date(value.date);
}

ul.append( Mustache.render(li, value) );

});
});
});
});

}


Les dates sont bien modifiées avec les balises <SPAN> pour être affichées via Mustache, cependant, ces modifications ont également eu lieu dans la variable globale list_global.


Fonction de modification de date :

const OLD_DATE = 7776000;	// Correspond à 90 jours en secondes
const RECENT_DATE = 604800; // Correspond à 7 jours en secondes

function check_date( entry_date ) {

var today = Math.floor(Date.now() / 1000);
var diff = dateDiff(date, today);


var full_date = new Date(entry_date * 1000);
var day = full_date.getDate();
var month = full_date.getMonth()+1;
var year = full_date.getFullYear();
var date = year+'-'+month+'-'+day;

if ( diff > OLD_DATE ) {
result = "<span style='color:blue'>"+date+"</span>";
} else if ( diff < RECENT_DATE ) {
result = "<span style='color:green'>"+date+"</span>";
} else {
result = date;
}

return result;
}


Est-ce que certain d'entre vous aurez une solution ou au moins une explication à ce "phénomène".
Personnellement je suis perdu et ne trouve pas cela très logique, mais je suis certain qu'il y a une explication !

Merci d'avance !

Sam

A voir également:

2 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
10 juin 2016 à 13:49
Bonjour,

 value.date = check_date(value.date);

... donc... tu stocke dans value.date ..... le résultat de la fonction check_date (sur le champ value.date) ....

Le plus simple serait que tu créés une seconde variable (value.check par exemple ) pour stocker ce résultat....
1
Japply Messages postés 2 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 10 juin 2016
10 juin 2016 à 15:40
Euh ... c'est vrai que dis comme ça ...

Merci beaucoup jordane45 !
0