2015-01-04 29 views
13

Ho un file "Test.ini" nel mio server, contenere il seguente testo:

"[ALL_OFF] 
[ALL_ON] 
" 

Sto cercando di ottenere questo il contenuto del file tramite $http servizio, qui è parte della mia funzione:

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

Questa operazione ha ottenuto un'eccezione angolare (SyntaxError: imprevisto token di A).
ho aperto il file quadro angolare, e ho trovato l'exeption:
Poiché il contenuto di file di testo iniziano con "[" e finisce con "]", angolare "pensare" che è un file JSON.

Ecco il codice angolare (linea 7474 in 1.2.23 versione):

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; 
    }], 

La mia domanda:

Come posso forza angolare non rendono questo controllo (if (JSON_START.test(data) && JSON_END.test(data))) e non analizzare la risposta del testo a JSON?

+0

Rendi il tuo server in grado di restituire il file con 'text/plain', quindi funzionerà bene – maurycy

risposta

35

È possibile sovrascrivere le impostazioni predefinite da questo:

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

La funzione sostituisce la funzione predefinita sopra avete postet per questa richiesta HTTP.

Oppure leggere this dove hanno scritto "Sovrascrittura delle trasformazioni predefinite per richiesta".

+16

o semplicemente' transformResponse: undefined' per nessuna trasformazione. – dfsq

+1

@dfsq questa la risposta che ho cercato - "transformResponse: undefined", thanks! – cheziHoyzer

+0

@dfsq hai trovato il pezzo mancante nei documenti. : D – Superole

7

Si può anche forzare angolare per curare la risposta come testo normale e non JSON:

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

Questo farà in modo che angolare non tenta di rilevare automaticamente il tipo di contenuto.

+0

sembra non funzionare, AngularJS v1.5.2 – elprup

+0

Non funziona perché 'content-type' nell'intestazione della risposta è sbagliato (probabilmente' application/json'). Infatti se il server fornisce 'content-type' corretto non è necessario aggiungere' responseType: 'text'' nella configurazione, e angular rispetterà ciò. –

+0

@ AlirezaMirian è vero. L'unico motivo per aggiungerlo in Angular è che non tenta di analizzarlo come JSON se non viene fornito 'content-type' dal server. – Ties