我的 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 中手动回显 Controller 操作中的任何内容。 CakePHP 中实现 json 输出的方法是使用 Data Views 和 Request Handler:
1.在 Controller 的initialize()方法中启用请求处理程序:
public function initialize(){
$this->loadComponent("RequestHandler");
}
2.在您的操作中,设置要序列化的数据:
$result = $response->body();
$this->set(compact("result"));
$this->set("_serialize", "result");
有关请求处理程序和数据 View 的更多信息可以在文档中找到:JSON and XML views
正如有人可能会指出的那样,您在这里还有一个替代方案:您可以在使用 die() 回显数据后立即停止脚本的执行。但这不是 Cake 处理这个问题的方式。
关于javascript - CakePhp:使用 CakePHP HttpClient 调用 API 时,响应正文中出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50267079/