You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Moodle插件PHP开发问题:echo语句无法正常工作

问题分析与解决方案

错误根源

你的代码直接用echo输出字符串,但当前执行上下文(大概率是AJAX请求、Web服务函数,或是Moodle期望返回JSON响应的场景)中,Moodle已经在准备生成标准JSON响应。你提前输出的No会破坏响应结构,导致最终响应内容变成No[{"error":...}],不符合JSON格式规范,因此Chrome抛出解析错误。

解决方案

1. 调试场景:避免直接echo,使用Moodle调试工具

如果只是想调试输出内容,不要用echo,改用Moodle官方调试机制:

  • 输出到调试日志/页面调试区:
    先在config.php中开启开发环境调试(仅开发时使用):

    $CFG->debug = DEBUG_DEVELOPER;
    $CFG->debugdisplay = true;
    

    然后在代码中使用:

    // 调试输出字符串
    debugging('No', DEBUG_DEVELOPER);
    // 调试输出对象
    debugging($record, DEBUG_DEVELOPER);
    

    调试内容会显示在页面底部,或写入Moodle的调试日志文件。

  • AJAX场景下的合法调试输出:
    如果是AJAX回调中调试,直接返回合法JSON:

    header('Content-Type: application/json');
    echo json_encode([
        'debug_message' => 'No',
        'record' => $record
    ]);
    die(); // 终止后续响应生成,避免破坏JSON结构
    

    这样前端能正常解析,可在Chrome控制台的Network面板查看响应内容。

2. 业务场景:遵循Moodle响应规范

  • 普通页面渲染:
    如果是在插件页面中输出内容,必须使用Moodle页面输出API,确保页面结构合法:

    global $OUTPUT, $PAGE;
    // 根据插件需求配置页面上下文、URL
    $PAGE->set_context(context_system::instance());
    $PAGE->set_url('/your/plugin/path.php');
    
    echo $OUTPUT->header();
    echo "No"; // 此处可正常输出字符串
    echo $OUTPUT->footer();
    
  • Web服务/AJAX接口:
    如果是开发Web服务函数,Moodle会自动将返回值转为JSON,只需返回数据即可,不要用echo:

    function your_plugin_web_service_function($courseid) {
        global $DB;
        $sql = <<<END
                SELECT COURSE.id, COURSE.fullname, COURSE.shortname, CAT.name AS category
                FROM {course} COURSE LEFT JOIN {course_categories} CAT ON COURSE.category = CAT.id
                WHERE COURSE.id = ?
                END;
    
        $record = $DB->get_records_sql($sql, array($courseid))[$courseid];
        
        // 返回数据,Moodle自动转为标准JSON响应
        return ['message' => 'No', 'course' => $record];
    }
    

3. 排查上下文

先确认代码执行位置:

  • 是否是AJAX请求触发的?
  • 是否是Web服务函数?
  • 是否是在Moodle的某个钩子(hook)中执行,而该钩子要求无输出或特定格式输出?

根据不同上下文选择对应解决方案即可。

内容的提问来源于stack exchange,提问作者L-iminate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 00:10:22