0

I'm getting http parsing error on my Angular get method when reading json from php backend api. I've used json_encode for generating json in php and I've set {responseType: 'json'} on get method parameter in Angular, but still no return. How can I correctly parse it in Angular?

list.php

<?php
include('connection.php');

$sql = "SELECT * FROM courses";
$data = $conn->query($sql);

$courses = [];
$index = 0;

foreach($data as $row) {
  $courses[$index]['courseId'] = $row['courseId'];
  $courses[$index]['courseName'] = $row['courseName'];
  $courses[$index]['coursePrice'] = $row['coursePrice'];
  $index++;
}

json_encode(['data'=>$courses]);

var_dump($courses);

?>

PHP return

array(2) {
  [0]=>
  array(3) {
    ["courseId"]=>
    int(1)
    ["courseName"]=>
    string(7) "Angular"
    ["coursePrice"]=>
    string(6) "850.00"
  }
  [1]=>
  array(3) {
    ["courseId"]=>
    int(2)
    ["courseName"]=>
    string(10) "Javascript"
    ["coursePrice"]=>
    string(6) "550.00"
  }
}

course.component.ts

import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { Course } from './course';
import { CourseService } from './course.service';

@Component({
  selector: 'app-course',
  templateUrl: './course.component.html',
  styleUrls: ['./course.component.css']
})
export class CourseComponent implements OnInit {

  courses: Course[] = [];
  course = new Course();

  constructor(
    private courseService: CourseService
    ) { }

  ngOnInit(): void {
    this.list();
  }

  list() {
    this.courseService.list().subscribe((res: Course[]) => {
      this.courses = res;
    });
  }

}

course.service.ts

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { map } from 'rxjs/operators';
import { Observable } from 'rxjs';
import { Course } from './course';

@Injectable({
  providedIn: 'root'
})
export class CourseService {

  url = "http://localhost:9000/backend/";

  courses: Course[] = [];
  course: Course = new Course();

  constructor(
    private http: HttpClient
  ) { }

  list(): Observable<Course[]> {
    return this.http.get(`${this.url}list.php`, {responseType: 'json'}).pipe(map((res: any) => {
        this.courses = res['data'];
        return this.courses;
      })
    );
  }
}

Error in Angular

{
    "headers": {
        "normalizedNames": {},
        "lazyUpdate": null
    },
    "status": 200,
    "statusText": "OK",
    "url": "http://localhost:9000/backend/list.php",
    "ok": false,
    "name": "HttpErrorResponse",
    "message": "Http failure during parsing for http://localhost:9000/backend/list.php",
    "error": {
        "error": {},
        "text": "array(2) {\n  [0]=>\n  array(3) {\n    [\"courseId\"]=>\n    int(1)\n    [\"courseName\"]=>\n    string(7) \"Angular\"\n    [\"coursePrice\"]=>\n    string(6) \"850.00\"\n  }\n  [1]=>\n  array(3) {\n    [\"courseId\"]=>\n    int(2)\n    [\"courseName\"]=>\n    string(10) \"Javascript\"\n    [\"coursePrice\"]=>\n    string(6) \"550.00\"\n  }\n}\n"
    }
}
Kelson Batista
  • 406
  • 4
  • 25

0 Answers0