Moodle错误:SyntaxError JSON中位置0处的意外标记m



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

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

安装后,当我点击";添加块";按钮,它抛出了这个错误:

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>"; 

在探索误差的同时;JSON中位于位置0"的意外标记m;始终显示代码中第一个echo块中的第一个字符,无论该块中有哪个或多少个echo调用。

由于这是我的第一份编码工作,而且我只使用Moodle和PHP大约3周了,我担心我的echo调用可能出了问题?当同时使用"single"one_answers"single;双";报价。

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

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

如果你在代码中添加了额外的"echo"语句,那么你应该期待你在这里看到的问题:

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

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

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

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

如果你想在开发代码时理解/调试代码,你应该安装xdebug,并使用适当的IDE(我使用PHPStorm,但其他IDE也可以(来设置断点和遍历代码-这可以让你直接看到发生了什么,而不会干扰生成的输出。

相关内容

  • 没有找到相关文章

最新更新