首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用回调时映射加载错误

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

Stack Overflow用户
提问于 2014-05-06 02:16:06
回答 1查看 104关注 0票数 0

我正在使用melonJS、HTML5、CSS3和PHP编写一个RPG。

当我加载游戏和登录时,它应该从数据库(级别、体验等)读取我的数据。

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

带有错误的

代码语言:javascript
复制
Uncaught melonJS: level mymap2<br />
<font size='1'><table class='xdebug-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-si...<omitted>...nd     
at   melonJS-0.9.11-min.js:13

错误发生在melonJS-0.9.11-min.js:13,所以我不确定在哪里进行调试。

如果我刷新,它就会加载得很好:

这使我相信存在一个缓存错误,或者我用来加载当前级别的回调是在加载完其余标记后返回级别名称。

要登录,我使用一个典型的会话,然后设置标题,以重新定位到游戏,如果他们成功登录。

在文档准备就绪的上,我向$.get文件发送一个$.get以加载映射:

代码语言:javascript
复制
$(document).ready(function() {  
$.get("php/CRUD.php", {"_functionToRun" : "getLevel"},
    function (returned_data) {
        game.data.currentLevel = returned_data;
    }
);

In CRUD.php,I do:

代码语言:javascript
复制
else if ($functionToRun == "getLevel") {
    $qry = 
        'SELECT levelname 
        FROM userstats
        WHERE id_user_fk ="' . $_SESSION['userid'] . '"';
        $result = $mysqli->query($qry) or die(mysqli_error($mysqli));

    while ($row = $result->fetch_assoc()) {
        $message = $row['levelname'];
    }               
}
echo $message;

在获取之后应该发生的事情是melonJS加载映射:

代码语言:javascript
复制
game.PlayScreen = me.ScreenObject.extend({

    //Do this on state change
    onResetEvent: function() {
        //load user data with query to database (CRUD.php)
        me.levelDirector.loadLevel(game.data.currentLevel);

为什么game.data.currentLevel有时会以HTML的形式返回,并在其他时候加载映射呢?

谢谢

编辑:

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

jQuery:文档就绪的,我只是加载所有的用户统计数据并将它们推入数组中。我用$.getJSON代替$.get

代码语言:javascript
复制
$.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:现在我只得到所有的列和回显json_encode($row):

代码语言:javascript
复制
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.dataArray1

代码语言:javascript
复制
game.PlayScreen = me.ScreenObject.extend({

onResetEvent: function() {
    log(game.data.dataArray[1]);
    me.levelDirector.loadLevel(game.data.dataArray[1]); 

当我刷新时,日志(game.data.dataArray 1 );输出“mymap2”

重新登录时,我得到以下错误:

代码语言:javascript
复制
undefined utilities.js:230
Uncaught TypeError: Cannot read property 'toString' of undefined 
EN

回答 1

Stack Overflow用户

发布于 2014-05-06 02:45:17

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

您应该能够使用浏览器工具( CRUD.php ,F12)查看向页面发出的请求,以及响应的实际情况,因此是一个更完整的错误。

无论如何,您应该更好地处理错误,而不是简单地使用die()调用。die()不仅为用户提供了他们不需要/不想要的信息,而且也不是像现在这样捕捉、记录或处理调试错误的好方法。

因此,与其:

代码语言:javascript
复制
$result = $mysqli->query($qry) or die(mysqli_error($mysqli));

考虑将错误记录到您选择的日志(通常是文件),并返回一些供客户端解析的内容

代码语言:javascript
复制
$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检查是否返回了ERROR,并相应地处理它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23484924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档