Отправка JSON с сервера на клиент?

Доброго времени суток!
Есть роут для выдачи всех покупателей:
$app->get('/api/customers', function(Request $request, Response $response){
    $sql = "SELECT * FROM customers";
    try{
        // Get DB Object
        $db = new db();
        // Connect
        $db = $db->connect();
        $stmt = $db->query($sql);
        $customers = $stmt->fetchAll(PDO::FETCH_OBJ);
        $db = null;
        echo json_encode($customers);
    } catch(PDOException $e){
        echo '{"error": {"text": '.$e->getMessage().'}';
    }
});

Как мне отправить JSON с API чтобы я мог его получить на клиенте например так:
let data;
        const xhr = new XMLHttpRequest();
        xhr.open('GET', '/api/customers', true);
        xhr.onload = () => {
            if (xhr.status !== 200) {
                console.log(xhr.status + ': ' + xhr.statusText);
            } else {
                data = JSON.parse(xhr.responseText);
                console.log(data);
            }
        };
        xhr.send();

Сейчас выводит такое:
5d5bb5bfa248b335136874.jpeg
  • Вопрос задан
  • 5271 просмотр
Решения вопроса 3
Вариант 1. Сделать как написано в документации . Вместо
echo json_encode($customers);
Делаем так:
return $response->withJson($data);

Вариант 2.
header('Content-Type: application/json'); //HTTP загловок
echo json_encode($customers);
die(); //Стоп. Не возвращаем стандартный response от слима
Ответ написан
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Ну если вы принципиально не хотите отдавать результат через $response, то допишите exit(); в конец функции.
Ответ написан
glaphire
@glaphire Куратор тега PHP
PHP developer
header('Content-Type: application/json');
 echo json_encode($customers);

Укажите тим возвращаемого ответа через header явно
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы