Я пытаюсь сделать стороннюю авторизацию. Когда я отправляю запрос POST на сервер, он отправляет HTML в качестве ответа.

< Сильный > Заголовок

private httpOptions = {
    headers: new HttpHeaders({
        'Accept': 'text/html',
        'Content-Type': 'application/json'
}),
    responseType: 'text',
};

API Call

return this.http.post(this.authUrl, this.httpOptions)
    .subscribe(data => {
        console.log(data);
    });

Я получаю SyntaxError:

Неожиданный токен <в JSON в позиции 0 в JSON.parse

1
Chase Vis 22 Сен 2018 в 21:34

2 ответа

Лучший ответ
 private httpOptions = {
    headers: new HttpHeaders({
        'Accept': 'text/html',
        'Content-Type': 'application/json'
    }),
    responseType: 'text'
};

В параметрах HTTP после responseType:'Text' была дополнительная запятая.

return this.http.post(this.authUrl,null, this.httpOptions)
        .subscribe(data => {
            console.log(data);
        });

Кроме того, HTTP POST для HttpClientModule принимает полезную нагрузку в качестве второго аргумента в вызове POST.

2
Roy 22 Сен 2018 в 19:07

На мой взгляд, лучший способ указать тип ответа - это когда вы вызываете сообщение http, это остановит HttpClient от попытки проанализировать пустой ответ как объект JSON.

 this.http.put(
 url,
 data,
 {
    headers: new HttpHeaders().set('Content-Type', 'application/json'),
    responseType: 'text' 
 }
 ).subscribe(  ....   );

С постом

return this.http.post(url, params, {headers : headers, withCredentials : true,responseType: 'text'});
0
yafiet andebrhan 20 Дек 2019 в 03:07