繁体   English   中英

CakePhp:使用CakePHP HttpClient调用API时,响应主体出现错误

[英]CakePhp: Got erros in response body when calling an API with the CakePHP HttpClient

我在来自API的响应中包含一些HTML文本。

我得到的回应

在此处输入图片说明

预览的回应

在此处输入图片说明

这是我的代码(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);
    }
});}

您不应该在CakePHP的控制器操作中手动回显任何内容。 在CakePHP中实现json输出的方法是将数据视图与请求处理程序一起使用:

1.在控制器的initialize()方法中启用请求处理程序:

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

2.在您的操作中,设置要序列化的数据:

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

有关请求处理程序和数据视图的更多信息,请参见以下文档: JSON和XML视图

可能有人会指出,您在这里还有一个选择:您可以在用die()回显数据后立即停止执行脚本。 但这不是Cake的处理方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM