2016-08-26 3 views
3

Я пытаюсь использовать следующие услуги в моем коде:Angular2: res.json не является функция

import {Injectable} from '@angular/core'; 
import {Http,Response} from "@angular/http"; 
import 'rxjs/Rx'; 

@Injectable() 
export class HttpService{ 
    constructor(private http : Http){} 

    getData(){ 
     return this.http.get("URI") 
     .map((res: Response) => res.json() ); 
    } 
} 

Проблема в том, во время выполнения он жалуется:

res.json is not a function 

I определили тип данных Реза как ответ, но все еще жалуется

.map((res: Response) => res.json() ) 

если я заменить карту с подписываться это работает отлично:

.subscribe(res =>{ 
       res.json(); 
       console.log("City is:"+ res.json().city.name) 
      }); 
+1

Вы уверены, что ваш запрос возвращает JSON? –

+0

Да, я уверен. – Salman

+0

У меня была эта проблема, когда у меня была функция functionA(), вызывающая функцию B(), и оба использовали вызов map(). К тому времени, когда функция A map() была названа картой B, она уже преобразовала res.json() в массив объектов, что означало, что A не имеет доступного json. Исправлено было удаление вызова map() из функцииB(), поэтому вызывалась только карта верхнего уровня() –

ответ

5

Попробуйте import 'rxjs/add/operator/map'; вместо import 'rxjs/Rx';. Это должно решить проблему.

+0

Если результат не правильный JSON, я считаю, что Стефан прав. –

+2

Хотя этот код может помочь решить проблему, он не объясняет _why_ и/или _how_, он отвечает на вопрос. Предоставление этого дополнительного контекста значительно улучшит его долгосрочную образовательную ценность. Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, включая ограничения и допущения. –

+5

@TobySpeight Если бы у меня было объяснение, разве вы не думаете, что я его предоставил? У меня была такая же проблема несколько дней назад, и именно так я ее исправил. Я не могу думать о какой-либо причине, почему 'import 'rxjs/Rx'' не работал, потому что ссылка на' rxjs/add/operator/map' существует в файле 'Rx.js', поэтому я предполагаю, что это своего рода ошибка, но я не уверен на 100%, поэтому я вообще не упомянул об этом, просто хотел предоставить исправление проблемы. –

9

Для чего стоит, в Angular 5, я обнаружил, что ошибку res.json is not a function можно устранить, просто вернув res, если ответ чистый json.

+0

Вы сэкономили много времени! –

-1

Попробуйте поставить только как этот

.map((response: Response) => response) 

Эта работа, безусловно, в угловых

Смежные вопросы