Bonjour,
Pourquoi lors d'un retour de données json une class n'est pas prise en compte à l'affichage ?
Merci

...
<a class="tool" href="#" title="Le poids recommandé pour les fichiers images est de 100 ko"><img src="files/ic_warning.gif"/></a>
...
die(json_encode($return));

La class "tool" sur le lien href n'est pas prise en compte.

11 réponses


bagui
Auteur
Réponse acceptée

sans problème, je te remercie de ton aide. Merci.
oui mon souci est résolu.

ça veut dire quoi la class tool n'est pas pris en compte?

bagui
Auteur

En fait la class tool correspond à l'affichage d'une info-bulle et suite à l'affichage des données json cette class n'affiche pas l'info-bulle.

donc c'est un problème javascript (l'affichage d'une infobulle) après un die() (en php) donc ça n'a aucun rapport avec json.

on a juste que le script javascript n'est pas pris en compte lorsque la page n'est pas chargé en totalité (ce qui peut paraitre logique car il manque tout ce qui se trouve après le die )

veut-tu absolument mettre un die? car normalement c'est réservé après des erreurs critiques ou après une redirection, bref a des moments ou on a pas besoins d'infobulles.
si oui, où dans ta page html est inséré le javascript qui ajoute les infobulles aux éléments de class "tool"?

bagui
Auteur

le js qui gere l'infobulle est insere en fin de page avant la fin du body.
est ce que un echo resoudrai mon souci ?

du coup le die empêche le script d'être ajouté à la page. Si tu veux absolument le die, ajoute le script dans le <head> mais sinon tu peut juste remplacer le die par un echo oui.

bagui
Auteur

j'ai remplacé le die par echo mais cela ne change rien.
Est-ce que cela reste correct si je regroupe le retour dans une var ($liste) par exemple
et que je retourne cette variable directement dans le js ?

$html = "";
$html = "code html + php";
echo $html
// et dans le code js 
$.ajax({
            url : 'ajax/mediatheque.php',
            data : {id:idDir,action:'list'},
            type : 'post',
            dataType : 'json',
            success : function(data){
                $(".medias").empty();
                $(".medias").html(data);
            }
        });

mais la page ou il y avait le die était appelée en ajax?

car si c'est le cas c'est normal que l'infobulle ne soit pas prise en compte.

Toujour si c'est le cas tu peut essayer ça, dans le script qui ajoute l'infobulle:
remplacer

$('.tool').click( ...

par

$('.tool').live('click', ...

ou alors apres avoir mis a jour le DOM, re-appelé le script pour l'infobulle.
genre après

$(".medias").html(data);

ajouter

$(".medias .tools").infobulle({ ... });
bagui
Auteur

J'ai trouvé la solution !!!
Juste après avoir chargé le contenu je rajoute la fonction infobulle dans le js :

$(recipient).append(data.listing);
            $(".tool").tooltip({
                'placement':'bottom'
            });

c'est quand même ce que je t'avais proposé de faire à la fin de mon dernier message mais c'est pas grave ^^.

résolu?