1

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

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

安装后,当我单击 Moodle Dashboard 中的“添加块”按钮时,它会抛出此错误:

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 调用:

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

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

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

在探索错误时,“位置 0 处 JSON 中的意外标记 m”中的 m 始终显示我的代码中第一个 echo 块中的第一个字符,无论我在块中有哪些或多少个 echo 调用。

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

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

4

1 回答 1

1

块中的任何函数都不应该直接产生任何输出 - 它们应该只返回可以在页面内适当位置输出的值。

如果您在代码中添加额外的“echo”语句,那么您应该期待您在此处看到的那种问题:

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

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

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

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

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

于 2022-01-26T08:11:59.840 回答