HTTPClient POST tries to parse a non-JSON response HTTPClient POST tries to parse a non-JSON response angular angular

HTTPClient POST tries to parse a non-JSON response


You've put responseType: 'text' in the wrong section of your httpOptions - It should sit outside of headers, like so:

private httpOptions = {  headers: new HttpHeaders({    'Accept': 'text/html, application/xhtml+xml, */*',    'Content-Type': 'application/x-www-form-urlencoded'  }),  responseType: 'text'};

With what you had before, a request header of responseType was being sent to the server, rather than simply having an instruction to Angular to actually treat the response as text.


This code finally worked for me to xhr download a pdf file (Angular 6 / Laravel 5.6).The specialty for downloading a PDF file vs a text file was 'responseType': 'blob' as 'json'

showPdf(filename: String){  this.restService.downloadFile(     'protected/getpdf',     {'filename': filename}  )}//method from restServicepublic downloadFile(endpoint:String, postData:Object){  var restService = this  var HTTPOptions = {     headers: new HttpHeaders({        'Accept':'application/pdf'     }),     'responseType': 'blob' as 'json'  }  this.http.post(this.baseurl+endpoint,postData,HTTPOptions )  .subscribe(     res => {        console.log(res) //do something with the blob     },     error => {        console.error('download error:', error)     },      () => {        console.log('Completed file download.')     }  )}

I found the Solution through Kirk Larkins Answer (thank you a lot!) and a long angular github issue thread https://github.com/angular/angular/issues/18586#issuecomment-323216764


If you just want to receive a plain text. You can set Http option without a header.

this.http.get("http://localhost:3000/login",{responseType: 'text'}).subscribe((result)=>console.log(result))