CakePhp: ошибки в теле ответа при вызове API с помощью CakePHP HttpClient - PullRequest
0 голосов
/ 10 мая 2018

В моем ответе от API есть текст HTML.

Ответ, который я получил

enter image description here

Предварительный ответ

enter image description here

Вот мой код (PHP):

    public function getBeatmapInformations() {
    $this->render(false);
    if($this->request->is('get')){
        $url = $_GET['beatmapUrl'];
        $isOsuUrlBeatmap = "#^(?:https://)?osu\.ppy\.sh/(?:b|beatmapsets)/(\d*)#";
        if(preg_match($isOsuUrlBeatmap, $url, $matches)){
            $OSU_API_KEY = "MY_API_KEY";
            $httpClient = new Client();
            $response = $httpClient->get('https://osu.ppy.sh/api/get_beatmaps', [
                    's' => intval($matches[1]),
                    'k' => $OSU_API_KEY
                ]
            );
            $result = $response->body();
            if(!empty($result)){
                echo $result;
            }
        }
    }
}

Сторона Javascript (запрос AJAX):

function launchAjaxRequest(beatMapUrl) {
let url = beatMapUrl.replace(/['"]+/g, '');
$.get({
    type : "GET",
    url: '/ofv/getBeatmapInformations',
    data: {
        beatmapUrl : url,
    },
    success: function(data){
       fillModesAvailablesForBeatmap(data);
    }
});}

1 Ответ

0 голосов
/ 10 мая 2018

Вы не должны вручную отображать что-либо в действиях ваших контроллеров в CakePHP. Способ получить вывод json в CakePHP - использовать представления данных с обработчиком запросов:

1. Обработчик запроса 1.Enable в методе initialize () вашего контроллера:

public function initialize(){
    $this->loadComponent("RequestHandler");
}

2.В ваших действиях настройте сериализацию данных:

$result = $response->body();
$this->set(compact("result"));
$this->set("_serialize", "result");

Подробнее об обработчике запросов и представлениях данных можно найти в документах: Представления JSON и XML

Как, возможно, кто-то укажет на это, у вас также есть альтернатива: вы можете просто остановить выполнение скрипта сразу после вывода данных с помощью die (). Но это не способ Cake справиться с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...