11566 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous
Je suis tombé sur le problème suivant:
- côté client je demande les valeurs d'un certain nombre de variables à un programme .php
- pour une des variables la valeur est FALSE
- quand le programme .php encode en JSON FALSE est remplacé par "0" (et non pas 0 comme je croyais)
- côté client(en js), "0" est compris comme "true"

Pour l'instant j'ai mis en dur

if(v === "0") v = false;

ce qui n'est pas très satisfaisant, surtout qu'il y a plusieurs variables de ce type
Y aurait-il une façon plus simple de traiter ce problème ?
Merci de votre aide
Bonjour,

Au vu de ta description du problème, il s'agirait plutôt d'u problème lors de l'encodage des données en JSON dans ton script PHP. Peux-tu nous partager ce dernier ?
Modérateur
Salut,

PHP avec son typage faible dynamique.....

Fait un array_map avec une récursive Smiley cligne


function normalizeForJSON($data) {
    if (is_array($data)) {
        return array_map('normalizeForJSON', $data);
    }
    
    if ($data === "false" || $data === "0" || $data === 0) {
        return false;
    }
    
    if ($data === "true" || $data === "1" || $data === 1) {
        return true;
    }
    
    return $data;
}

$data_normalized = normalizeForJSON($data);
echo json_encode($data_normalized);

*script fait de tête. J'ai peut être fait une erreur. C'est une piste à suivre.
En fait la fonction récursive qui prépare les données avant de passer par json_encode avait la ligne suivante

if(is_numeric($data)) $data = strval($data);

C'est une fonction que j'utilise depuis longtemps, j'avais totalement oublié ce point, je ne sais plus pourquoi j'avais écrit cela.
En supprimant cette ligne de code, "false" prend bien la valeur 0 et non "0".
J'espère que ça ne va pas me créer un bug ailleurs... Smiley cligne
Modifié par PapyJP (13 Nov 2025 - 09:58)