2015-01-04 36 views
13
yanıtı ayrıştırma değil

benim sunucuda bir "Test.ini" dosyası var aşağıdaki metni içerir:

"[ALL_OFF] 
[ALL_ON] 
" 

Ben $http yoluyla bu dosya içeriğini almaya çalışıyorum

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

Bu işlem bir Açısal istisna var (SyntaxError: Beklenmeyen belirteç A) hizmeti, işte benim işlevinin bir parçasıdır.
Ben Açısal çerçeve dosyasını açtı ve ben exeption bulundu: metin dosyası içeriği ile başlar "[" ile sonlanır "]", Açısal JSON dosyası olduğunu "düşünmek" Çünkü
. İşte

( 1.2.23 sürümünde satır 7474) Açısal kodudur:

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

Sorum: can I kuvvet açısal için değil Bu kontrolü yapmak nasıl

() ve değil, metin yanıtı JSON?

+0

Sunucunuzun 'text/plain' ile dosya döndürmesini sağlayın, o zaman sadece iyi çalışır – maurycy

cevap

35

Buna göre varsayılan değerleri geçersiz kılabilirsiniz:

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

fonksiyon yukarıdaki varsayılan işlevini yerine bu HTTP isteği için postet var. Ya da "İstek Başına Varsayılan Dönüşümlerin Geçersiz Kılınması" yazdıkları this ya da okuyun.

+16

Veya sadece dönüştürme için' transformResponse: undefined'. – dfsq

+1

@dfsq bu yanıt için aradığım cevap - "transformResponse: undefined", teşekkürler! – cheziHoyzer

+0

@dfsq, dokümanlardan eksik olan parçayı buldunuz. : D – Superole

7

Ayrıca düz metin değil JSON olarak tepkisini tedavi etmek açısal zorlayabilirsiniz:

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

Bu Açısal içerik türünü otomatik olarak algılamasına deneyin olmadığından emin yapacaktır.

+0

çalışmıyor görünüyor, AngularJS v1.5.2 – elprup

+0

Yanıt başlıkta 'içerik türü' yanlış olduğundan (büyük olasılıkla 'uygulama/json') çalışmıyor. Sunucu doğru "içerik türü" sağlıyorsa, konfigürasyonunuza 'responseType:' text'' eklemeniz gerekmez ve açısal buna saygı duyar. –

+0

@AlirezaMirian bu doğru. Angular'a eklemenin tek nedeni, sunucu tarafından "içerik türü" sağlanmamışsa JSON olarak ayrıştırmaya çalışmaz. – Ties