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
DDDoriginal
2024-12-29 12:26:171041parcourir

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)

Dans le modèle :

var tree = {{ tree|tojson }};

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)

Dans le modèle :

{% for item in tree %}
    <li>{{ item }}</li>
{% endfor %}

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)))

Dans le modèle :

var tree = {{ tree }};

Utilisation du balisage :

return render_template('tree.html', tree=json.dumps(tree))

Dans le modèle :

var tree = {{ tree|safe }};

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!

Déclaration:
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