Javascript 使用回调时映射加载错误

Javascript 使用回调时映射加载错误,javascript,php,jquery,html,callback,Javascript,Php,Jquery,Html,Callback,我正在使用melonJS、HTML5、CSS3和PHP开发一个RPG 当我加载游戏并登录时,它应该从数据库级别、经验等读取我的统计数据 当我第一次加载游戏时,我会看到一个空白屏幕: 有误: 在CRUD.php中,我执行以下操作: 获取地图后,melonJS将加载地图: 为什么game.data.currentLevel有时会以HTML的形式返回,而其他时候会加载地图 谢谢 编辑: 好吧,我已经弄明白为什么有时候会输出HTML。。。我需要将其解析为JSON jQuery:在docready上,我只

我正在使用melonJS、HTML5、CSS3和PHP开发一个RPG

当我加载游戏并登录时,它应该从数据库级别、经验等读取我的统计数据

当我第一次加载游戏时,我会看到一个空白屏幕:

有误:

在CRUD.php中,我执行以下操作:

获取地图后,melonJS将加载地图:

为什么game.data.currentLevel有时会以HTML的形式返回,而其他时候会加载地图

谢谢

编辑:

好吧,我已经弄明白为什么有时候会输出HTML。。。我需要将其解析为JSON

jQuery:在docready上,我只需加载所有用户统计数据并将它们放入一个数组中。我使用的是$.getJSON而不是$.get

$.getJSON("php/CRUD.php", {"_functionToRun" : ""},
    function (returned_data) {
        var exp = returned_data.experience,
            levelname = returned_data.levelname,
            player = returned_data.username_fk;

        game.data.dataArray.push(exp, levelname, player);
    }
);
PHP:现在我只获取所有列和echo json_encode$row:

else {
    $qry = 
        'SELECT * 
        FROM userstats
        WHERE id_user_fk ="' . $_SESSION['userid'] . '"';

    $result = $mysqli->query($qry) or die(mysqli_error($mysqli));

    while ($row = $result->fetch_assoc()) {
        echo json_encode($row);
        exit;
    }   
}
melonJS:现在我传入带有levelname属性的数组:game.data.dataArray

刷新时,loggame.data.dataArray[1];输出mymap2

重新登录时,出现以下错误:


根据您的发现,看起来可能没有设置$_SESSION['userid']值,导致第一次调用时查询失败。它也可能是完全不同的东西,你发布的错误似乎不是完整的消息

您应该能够使用浏览器工具F12查看对CRUD.php页面的请求,以及响应的实际内容,从而查看更完整的错误

无论如何,你应该更好地处理你的错误,而不是简单地使用你的死亡召唤。正如您现在发现的那样,die不仅为用户提供了他们不需要/想要的信息,而且不是捕获、记录或处理错误以进行调试的好方法

因此,不是:

$result = $mysqli->query($qry) or die(mysqli_error($mysqli));
考虑将错误记录到日志文件中,并返回一些内容供客户端解析

$result = $mysqli->query($qry);
if($result === FALSE)
{
  // Log error using $mysqli->errno and $mysqli->error
  $message "ERROR"; // Or throw exception, then catch later on
}
else
{
  // Continue on from here. with data retrieval.
  while ($row = $result->fetch_assoc()) {
      $message = $row['levelname'];
  }
}

然后,如果返回错误,您可以使用JS进行检查,并进行相应的处理。

这听起来更像是会话变量或缓存的问题,正如您所建议的那样。也许在您第一次访问CRUD.php时,$\u会话['userid']为空,因此您将返回一个错误?编辑后,您不会收到js错误,因为我们无法看到您的所有javascript,所以我们无法帮助您。您现有的php代码仍然会有我上面提到的缺陷,除非您处理的是die语句而不是JSON的潜在返回。
$.getJSON("php/CRUD.php", {"_functionToRun" : ""},
    function (returned_data) {
        var exp = returned_data.experience,
            levelname = returned_data.levelname,
            player = returned_data.username_fk;

        game.data.dataArray.push(exp, levelname, player);
    }
);
else {
    $qry = 
        'SELECT * 
        FROM userstats
        WHERE id_user_fk ="' . $_SESSION['userid'] . '"';

    $result = $mysqli->query($qry) or die(mysqli_error($mysqli));

    while ($row = $result->fetch_assoc()) {
        echo json_encode($row);
        exit;
    }   
}
game.PlayScreen = me.ScreenObject.extend({

onResetEvent: function() {
    log(game.data.dataArray[1]);
    me.levelDirector.loadLevel(game.data.dataArray[1]); 
undefined utilities.js:230
Uncaught TypeError: Cannot read property 'toString' of undefined 
$result = $mysqli->query($qry) or die(mysqli_error($mysqli));
$result = $mysqli->query($qry);
if($result === FALSE)
{
  // Log error using $mysqli->errno and $mysqli->error
  $message "ERROR"; // Or throw exception, then catch later on
}
else
{
  // Continue on from here. with data retrieval.
  while ($row = $result->fetch_assoc()) {
      $message = $row['levelname'];
  }
}