[英]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.