2015-01-04 10 views
13

Ich habe eine "test.ini" Datei in meinem Server, enthält den folgenden Text:

"[ALL_OFF] 
[ALL_ON] 
" 

Ich versuche, diese Datei Inhalte über $http zu erhalten Service, hier ist ein Teil meiner Funktion:

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

Diese Operation bekam eine Angular Ausnahme (Syntaxerror: unerwartete Token A).
öffnete ich die Angular Rahmen Datei, und ich fand die Ausnahme:
Da die Textdatei Inhalt mit Start „[“ und mit „]“ Angular „denken“, dass eine JSON-Datei. Hier

ist der Winkelcode (Linie 7474 in 1.2.23 Version):

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

Meine Frage:

Wie kann ich Kraft Winkel zu nicht diese Prüfung machen (if (JSON_START.test(data) && JSON_END.test(data))) und nicht die Textantwort auf JSON analysieren?

+0

Machen Sie Ihren Server, um die Datei mit 'text/plain' zurückzugeben, dann wird es gut funktionieren – maurycy

Antwort

35

können Sie die Standardeinstellungen überschreiben, indem diese:

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

Die Funktion oben ersetzt die Standard-Funktion, die Sie postet für diese HTTP-Anforderung haben.

Oder lesen Sie this, wo sie "überschreiben die Standardtransformationen pro Anfrage" geschrieben.

+16

Oder einfach' transformResponse: undefined' für keine Umwandlung. – dfsq

+1

@dfsq dies die Antwort, die ich suchte - "transformResponse: undefined", danke! – cheziHoyzer

+0

@dfsq Sie haben das Stück gefunden, das in der Dokumentation fehlte. : D – Superole

7

Sie können auch Winkel zwingen, die Antwort als Klartext und nicht JSON zu behandeln:

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

Dies wird sicherstellen, dass Angular nicht versucht, automatische Erkennung des Typs Inhalt.

+0

scheint nicht zu funktionieren, AngularJS v1.5.2 – elprup

+0

Es funktioniert nicht, weil 'content-type' im Antwortheader falsch ist (wahrscheinlich' application/json'). Wenn der Server den richtigen 'content-type' liefert, müssen Sie' responseType: 'text' nicht in Ihrer Konfiguration hinzufügen, und eckle wird das respektieren. –

+0

@ AlirezaMirian das ist wahr. Der einzige Grund, um es in Angular hinzuzufügen, ist, dass es nicht versucht, es als JSON zu analysieren, wenn vom Server kein "Inhaltstyp" bereitgestellt wird. – Ties