2009-12-16 8 views
0

Je veux appeler un php avec jquery ajax pour effectuer certaines choses de la base de données et ensuite retourner 2 listes de liens. donc je dois renvoyer ces deux listes de liens à jquery pour pouvoir afficher la liste 1 dans la partie gauche de la page et la liste 2 dans la partie droite.Retourne une chaîne json avec des caractères html?

J'ai créé les listes dans des tableaux séparés que j'envoie à jquery avec json_encode mais j'ai remarqué qu'il échappe tous les caractères html. Par conséquent, lorsque j'ai affiché la liste dans le HTML, ils n'ont plus de liens. Comment puis-je conserver les codes html dans mes tableaux retournés à jquery?

EDIT: est-ce la bonne façon de procéder si vous voulez séparer les données de php afin que jquery puisse les afficher à différents endroits en html?

// list 1 
while($row = mysqli_fetch_assoc($saved_tags)) 
{ 
    $display_saved_tags[] = "<a id='showtag' href='answer.php?id=" . $row['id'] . "'>" . $row['name'] . "</a><br />"; 
} 

// list 2 
while($row = mysqli_fetch_assoc($related_tags)) 
{ 
    $display_related_tags[] = "<a id='showtag' href='answer.php?id=" . $row['id'] . "'>" . $row['name'] . "</a><br />"; 
} 

// return lists to jquery 
echo json_encode('display_saved_tags' => $display_saved_tags, 'display_related_tags' => $display_related_tags)); 
+0

Cela va être une chose PHP. Pouvez-vous poster votre code PHP réel afin que les gens puissent voir comment vous appelez 'json_encode'? –

Répondre

6

json_encode directement en conflit de caractères d'échappement avec sortie HTML. J'ai eu le même problème mais j'ai décidé d'utiliser une solution alternative à l'époque. Je viens d'avoir une pensée que vous pourriez peut-être faire:

$data = new stdClass(); 
$data->html1 = base64_encode('<h1>html in here</h1>'); 
$data->html2 = base64_encode('<p><strong>more html</strong></p>'); 
echo json_encode($data); 

Sur le frontend:

callbackFunction(json) { 
    alert(base64_decode(json.html1)); 
    alert(base64_decode(json.html2)); 
} 

Vous devez les implémentations javascript de base64_decode et utf8_decode qui se trouve à: http://phpjs.org/functions/base64_decode:357

+0

Je pense que c'est quelque chose de mal avec le code dans base64 et utf8. il dit que les fonctions ne sont pas déclarées quand je l'utilise. et quand je débogue les fonctions avec netbeans il semble que le do {} while est corrompu. le supprimer rend les fonctions déclarées ... avez-vous le code dans votre ordinateur? Je ne sais pas comment y remédier .. – ajsie

+0

il n'y avait rien de mal avec le code, il a travaillé quand je l'ai sorti en dehors de la fonction de prêt de document jquery. cela fonctionne comme un charme! – ajsie

0

utilisation peut utiliser la fonction ci-dessous pour non échapper aux caractères lors de la lecture ou l'envoi sur le navigateur:

html_entity_decode('your response here'); 

Aussi parce que que vous utilisez json_encode, assurez-vous que vous n'avez pas besoin ci-dessous fonction dans votre code:

json_decode 
+0

J'ai utilisé ceci dans le fichier php: echo html_entity_decode (json_encode ($ display_saved_tags)); mais c'est étrange, il s'échappe encore à chien <\/a>. Je peux le voir dans Firebug. – ajsie

Questions connexes