2010-01-18 6 views
1

J'ai une requête AJAX qui crée un 'post', et après un post réussi, je veux que le HTML soit réinjecté dans le DOM. En ce moment je retourne un tableau JSON qui détaille le succès/erreur, et quand j'ai un succès, j'inclue également le HTML pour le message dans la réponse. Donc, j'analyser la réponse en JSON, et définir une clé dans le tableau JSON à un tas de code HTML.Quelle est la bonne façon d'obtenir du HTML à partir d'une réponse AJAX au format JSON?

Naturellement, le code HTML fait casser la matrice JSON - que dois-je faire pour l'échapper (ou existe-t-il une meilleure façon de le faire?). Je reçois une réponse AJAX avec un tableau JSON comme suit:

[{response:"success"},{html:'<div class="this is going to break... 

Merci!

+0

seulement une citation unique dans votre code html doit briser le JSON. et idéalement, vous devriez utiliser une bibliothèque json-conversion pour faire la conversion – Anurag

Répondre

1

Contrairement à ce que vous avez probablement l'habitude de faire en JavaScript, 'ne peut pas commencer une chaîne dans JSON. Il est strictement «Les guillemets simples travail lorsque vous passez JSON JavaScript .. un peu comme <br>fonctionne lorsque vous voulez mettre un saut de ligne XHTML.

, utilisez » pour ouvrir la chaîne HTML, et désinfectez vos citations avec \ ».

json.org a plus d'info WRT ce que vous devez aseptiser. Bien que la liste des caractères spéciaux est pas long, il est probablement préférable d'utiliser une bibliothèque comme Anurag suggère dans un commentaire.

+0

oh, je ne le savais pas :) –

+0

Je devrais probablement préciser: guillemets simples * travail * lorsque vous passez JSON à JavaScript .. un peu comme
* fonctionne * lorsque vous voulez mettre un saut de ligne XHTML. –

+0

vous devriez avoir édité votre question au lieu de le commenter. –

1

En dehors de l'échappement des guillemets comme mentionné par BranTheMan, les sauts de ligne rompent également la chaîne JSON s. Vous devez remplacer les nouvelles lignes par \n.

Personnellement, j'ai trouvé que ce assez:

// Don't know what your serverside language is, example in javascript syntax: 

print(encodeJSON({ 
    response : "success", 
    html : htmlString.replace(/\n/g,'\\n').replace(/"/g,'\\"') 
})); 
+0

Merci! Ça marchera. – ash

Questions connexes