javascript - CakePhp:使用 CakePHP HttpClient 调用 API 时,响应正文中出现错误

标签 javascript php ajax api cakephp

我的 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);
    }
});}

最佳答案

您不应该在 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/

相关文章:

php - 每次我发送 INSERT 查询时,都会将 + 1 添加到 mysql 数据库的字段。插入(不更新)

javascript - 对象数组没有被解析为原生对象的 JavaScript 数组?

javascript - WordPress AJAX 问题

javascript - 为什么传递给我的递归函数的参数没有更新其值?

javascript - 如何在 JQuery 语句成功时制作简单的延迟

php - 表对象使用 Cake\ORM\Table 而不是具体类 : How to fix?

php - 使用正则表达式删除字符串中不需要的字符

javascript - Google map 多边形无法在 IE 中正确呈现(9 和 10)

javascript - 为元素动态创建工具提示

javascript - 将值传递给 URL、安全措施