Moodle error: SyntaxError Unexpected token m in JSON at position 0

Moodle error: SyntaxError Unexpected token m in JSON at position 0

我在 Moodle (v3.11) 中遇到过这个错误,想知道是否有人知道修复方法。

我有一个正在与我的团队一起构建的块插件。我们四个人都遇到了同样的错误。

安装后,当我点击 Moodle 仪表板中的“添加块”按钮时,出现此错误:

SyntaxError
Unexpected token m in JSON at position 0

SyntaxError: Unexpected token m in JSON at position 0
at parse (<anonymous>)
at http://localhost/moodle/lib/javascript.php/1643153825/lib/jquery/jquery-3.5.1.min.js:2:79369
at l (http://localhost/moodle/lib/javascript.php/1643153825/lib/jquery/jquery-3.5.1.min.js:2:79486)
at XMLHttpRequest.<anonymous> (http://localhost/moodle/lib/javascript.php/1643153825/lib/jquery/jquery-3.5.1.min.js:2:82254)

我已将导致错误的代码缩小为一个简单的回显调用:

注意:我一直在使用 echo 来临时显示我在块中开发的函数的信息。

示例(在位置 0 处抛出意外的“m”)。

echo 'mod id: ' . $moduleid . "<br>"; 

在探索错误时,“Unexpected token m in JSON at position 0”中的 m 始终显示我代码中第一个 echo 块中的第一个字符,无论我调用了哪个或多少个 echo 调用有在块中。

由于这是我的第一份编码工作,而且我使用 Moodle 和 PHP 的时间也只有大约 3 周,我担心我的 echo 调用可能做错了什么?同时使用 'single' 和“双”引号时会引发错误。

为什么在 Moodle 3.11 中单击“添加块”时向块插件添加回显会导致语法错误?

None 块中的函数应该直接产生任何输出 - 它们应该只有 return 值,可以在页面内的适当位置输出。

如果您在代码中添加了额外的 'echo' 语句,那么您应该预料到您在这里看到的问题类型:

  • 'Add the block' Javascript 代码向服务器发出回调以执行添加
  • 作为该过程的一部分,块的 get_content() 函数被调用以查看块中是否有任何内容要为当前用户显示(这决定了块是否应该显示给当前用户)当前用户)
  • 服务器代码然后输出一个 JSON-formatted 响应,Javascript 解析该响应以检查回调是否成功。

如果您向块的函数添加任何额外的输出,那么这将出现在预期的 JSON 输出之前的响应中。例如你可能会得到这样的东西:

mod id: 5<br>{"error": false, "response": "...CONTENT..."}

当 Javascript 代码尝试将其解析为 JSON 时,它发现第一个字符是 'm' 而不是 '{',因此失败并显示错误报告。

如果您想在开发代码时理解/调试代码,您应该安装 xdebug 并使用适当的 IDE(我使用 PHPStorm,但其他 IDE 也可以)设置断点并逐步执行代码 - 这使您可以直接查看正在发生的事情,而不会弄乱生成的输出。