Bonjour,

Je rencontre un problème avec une API.
J'utilise AngularJS, et j'utilise $http pour envoyer une string.
Il s'agit d'une description que l'utilisateur remplie.

Le problème survient lorsque la description contient un \n .
L'envoie du message à l'API fonctionne parfaitement, mais lorsque je dois afficher ce message contenant le \n, cette erreur apparaît:
SyntaxError: Unexpected token
in JSON at position 225

Comment régler ce soucis ?
Je suppose que je dois remplacer les \n juste avant d'envoyer le message mais je ne sais pas comment m'y prendre :/

5 réponses


Maitre2B
Auteur
Réponse acceptée

Merci pour la réponse.
J'ai trouvé la solution.

Il faut bien faire un

var formatedString = vm.oldString.replace(/\n/g,"<br/>");

mais au niveau du HTML, il faut utiliser ng-bind-html ce qui va interpréter le <br/>

Maitre2B
Auteur

Personne ? :s

Maitre2B
Auteur

Sachant que :
vm.requestDescription = "une phrase avec un
retour à la ligne."

J'ai fait ça

var formatedString = vm.requestDescription.replace(/\n/g,"<br/>");

et ça donne:
vm.requestDescription = "une phrase avec un <br/>retour à la ligne.

Comment faire pour que le <br/> soit interprété ?

ça dépends ou tu veut l'interpréter si c'est dans une chaine de caractère tu remets le n si c'est dans une page web normalement </ br> suffis

Salut,

Perso, je me suis fait une fonction utilitaire ainsi qu'un petit filtre (utile pour les vues) qui me permet de convertir à la volée les \n en <br> (un peu à la manière de la fonction PHP nl2br) :

// Filtre
angular.module('iapp')
    .filter('nl2brFilter', ['utilsService', function (utilsService) {
        'use strict';

        return function (str, isXhtml) {
            if (!str) {
                return '';
            }

            return utilsService.nl2br(str, isXhtml);
        };
    }]);

// Fonction dans mon utilsService.js :
/* ... */

nl2br: function (str, isXhtml) {
    var breakTag = '<br' + (isXhtml ? ' /' : '') + '>';

    return (str + '')
        .replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
},

/* ... */

Dans ton cas, il suffit d'injecter le service utilsService dans ton controller, de faire
var formatedString = utilsService.nl2br(vm.requestDescription)
et le tour est joué ;)