web-dev-qa-db-fra.com

Angular $ service http - force de ne pas analyser la réponse à JSON

J'ai un fichier "test.ini" sur mon serveur, contient le texte suivant:

"[ALL_OFF]
 [ALL_ON]
"

J'essaie d'obtenir ce contenu de fichier via le service $http, Voici une partie de ma fonction:

  var params = { url: 'test.ini'};
 $http(params).then(
                 function (APIResponse)
                   {
                     deferred.resolve(APIResponse.data);
                   },
                    function (APIResponse)
                   {
                     deferred.reject(APIResponse);
                   });

Cette opération a obtenu une Angular angulaire (SyntaxError: jeton A inattendu)).
J'ai ouvert le fichier de structure Angular, et j'ai trouvé l'exception:
Parce que le contenu du fichier texte commence par "[" et se termine par "]", Angular "think" that est un fichier JSON.

Voici le code Angular (ligne 7474 dans version 1.2.2):

 var defaults = this.defaults = {
    // transform incoming response data
    transformResponse: [function(data) {
      if (isString(data)) {
        // strip json vulnerability protection prefix
        data = data.replace(PROTECTION_PREFIX, '');
        if (JSON_START.test(data) && JSON_END.test(data))
          data = fromJson(data);
      }
      return data;
    }],

Ma question:

Comment puis-je forcer angular à pas faire cette vérification (if (JSON_START.test(data) && JSON_END.test(data))) et pas = analyser la réponse textuelle à JSON?

16
cheziHoyzer

Vous pouvez remplacer les valeurs par défaut par ceci:

$http({
  url: '...',
  method: 'GET',
  transformResponse: [function (data) {
      // Do whatever you want!
      return data;
  }]
});

La fonction ci-dessus remplace la fonction par défaut que vous avez postet pour cette requête HTTP.

Ou lisez this où ils ont écrit "Overriding the Default Transformations Per Request".

43
Sebastian Barth

Vous pouvez également forcer angular pour traiter la réponse en texte brut et non en JSON:

$http({
    url: '...',
    method: 'GET',
    responseType: 'text'
});

Cela garantira que Angular n'essaie pas de détecter automatiquement le type de contenu.

9
Ties