2013-07-26 14 views
13

Jestem nowy w AngularJS i buduję aplikację, która będzie współdziałać z serwerem. Serwer ma interfejs REST API, ale reaguje na niektóre metody zwykłym tekstem, a na inne za pomocą JSON. Zaimplementowałem prostą metodę żądania http, używając usługi AngularJS '$resource.Jak obsłużyć odpowiedź serwera tekstowego?

Jednak, gdy odpowiedź serwera jest zwykłym tekstem, odpowiedź w AngularJS jest obiektem z jednym wpisem dla każdego znaku w słowie odpowiedzi. Jak mogę to obejść (w dobry sposób)? Idealnie, chciałbym móc powiedzieć mojej usłudze, kiedy oczekiwać zwykłego tekstu i kiedy oczekiwać JSON-a, i uzyskać ładnie sformatowaną odpowiedź w obu przypadkach.

+1

Mam dokładnie ten sam problem. Zgodnie z REST, zwracanym obiektem operacji POST powinien być identyfikator URI (lub podobnie jak w moim przypadku identyfikator) nowo utworzonego obiektu. Angular nie działa tutaj w $ pomocniku zasobów, przyjmując, że wszystkie odpowiedzi mają być JSON. Wydaje mi się, że niestandardowy program obsługi odpowiedzi może rozwiązać ten problem. Będzie eksperymentował z tym. Keep you posted;) – Pepster

Odpowiedz

17

Zasób $ $ jest wygodnym opakowaniem do pracy z obiektami Restful. Automatycznie spróbuje analizować jako JSON i zapełni obiekt w oparciu o definicję $ resource.

Lepiej korzystaj z zasobów $http service dla niespokojny zasobów.

To jest interfejs API niższego poziomu, który nie ma takiego apodyktycznego mapowania obiektów.

np.

$http({method: "GET", url: "/myTextDocURL"}) 
    .success(function(data){ 
     // data should be text string here (only if the server response is text/plain) 
    } 
); 
+0

Dlaczego dla niespokojnych zasobów? –

11

Według documentation określić akcję niestandardową dla zasobu, który może zastąpić domyślne zachowanie, które ma do konwersji odpowiedź od JSON do JavaScript Object. Parametr "data" funkcji transformResponse będzie zawierał ładunek tekstowy.

W tym przypadku metoda transformResponse zwraca obiekt zawierający ciąg, a nie tylko sam łańcuch, ponieważ w przeciwnym razie STILL spróbuje przekonwertować ciąg do tablicy.

var Stub = $resource('/files/:filename', {}, {'getText': { 
     transformResponse: function(data, headersGetter, status) { 
      return {content: data}; 
     } 
    }}); 

Aby korzystać z zasobów nazywają swoją niestandardową getText() działania zamiast zwykły stary get():

Stub.getText({'filename': 'someFile.txt'}, function(response) { 
     console.info("Content of someFile.txt = " . response.content); 
    }); 

Jest to stary post, ale pomyślałem, że zasłużył się nową odpowiedź.

+0

to działało i w moim przypadku zwracałem dane json jako zwykły/tekstowy (celowo), ale $ http wciąż zamieniło go w obiekt w porównaniu do zwykłego łańcucha znaków, więc ta metoda działała najlepiej, plus mogę nadal używać mojego zasobu dla innych Funkcje. Dzięki –

+0

Dzięki, działa jak czar! – Tobi

Powiązane problemy