Maison > interface Web > js tutoriel > Pourquoi JSON.parse échoue-t-il avec une « Erreur de syntaxe : jeton inattendu '&' » lors du rendu de données JSON à partir d'un modèle Jinja ?

Pourquoi JSON.parse échoue-t-il avec une « Erreur de syntaxe : jeton inattendu '&' » lors du rendu de données JSON à partir d'un modèle Jinja ?

DDD
Libérer: 2024-12-29 12:26:17
original
1005 Les gens l'ont consulté

Why Does JSON.parse Fail with a

Erreur de syntaxe JavaScript lors du rendu des données JSON à partir d'un modèle Jinja

Description du problème

Lors de la tentative de parcourir les données JSON rendues dans un modèle Jinja à l'aide de JavaScript, le navigateur renvoie une erreur "SyntaxError: Unexpected token '&'". Le problème survient lors de l'appel de JSON.parse sur les données rendues.

Solution

Échappage du modèle de Flask

L'environnement Jinja de Flask applique l'échappement HTML automatique aux données rendues dans les modèles pour atténuer la sécurité risques. Cependant, cet échappement peut interférer avec l'interprétation des données au format JSON.

Flask fournit le filtre tojson pour résoudre ce problème. Il convertit les objets Python en JSON et les marque comme sûrs pour le rendu.

return render_template('tree.html', tree=tree)
Copier après la connexion
Copier après la connexion

Dans le modèle :

var tree = {{ tree|tojson }};
Copier après la connexion

Rendu non JSON

Si les données sont n'est pas destiné à être utilisé par JavaScript, le filtre tojson est inutile. Pensez à transmettre les données Python directement et à les utiliser dans le modèle si nécessaire.

return render_template('tree.html', tree=tree)
Copier après la connexion
Copier après la connexion

Dans le modèle :

{% for item in tree %}
    <li>{{ item }}</li>
{% endfor %}
Copier après la connexion

Désactivation de l'échappement

Si l'échappement n'est pas nécessaire et vous avez déjà des données JSON sous forme de chaîne, vous pouvez désactiver l'échappement à l'aide du filtre sécurisé ou Balisage.

Utilisation d'un filtre sécurisé :

return render_template('tree.html', tree=Markup(json.dumps(tree)))
Copier après la connexion

Dans le modèle :

var tree = {{ tree }};
Copier après la connexion

Utilisation du balisage :

return render_template('tree.html', tree=json.dumps(tree))
Copier après la connexion

Dans le modèle :

var tree = {{ tree|safe }};
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal