我在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);
}
});}
答案 0 :(得分:2)
您不应在CakePHP中手动回显控制器操作中的任何内容。在CakePHP中实现json输出的方法是使用带有请求处理程序的数据视图:
1.控制器的initialize()方法中的启用请求处理程序:
public function initialize(){
$this->loadComponent("RequestHandler");
}
2.在您的操作中,将数据设置为序列化:
$result = $response->body();
$this->set(compact("result"));
$this->set("_serialize", "result");
有关请求处理程序和数据视图的更多信息,请参阅文档:JSON and XML views
由于可能有人会指出它,你在这里也有另一种选择:你可以在用die()回显数据后立即停止执行脚本。但这不是Cake的处理方式。