我正在使用melonJS、HTML5、CSS3和PHP编写一个RPG。
当我加载游戏和登录时,它应该从数据库(级别、体验等)读取我的数据。
当我第一次加载游戏时,我得到一个空白屏幕:

带有错误的:
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以加载映射:
$(document).ready(function() {
$.get("php/CRUD.php", {"_functionToRun" : "getLevel"},
function (returned_data) {
game.data.currentLevel = returned_data;
}
);In CRUD.php,I do:
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加载映射:
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
$.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):
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
game.PlayScreen = me.ScreenObject.extend({
onResetEvent: function() {
log(game.data.dataArray[1]);
me.levelDirector.loadLevel(game.data.dataArray[1]); 当我刷新时,日志(game.data.dataArray 1 );输出“mymap2”。
重新登录时,我得到以下错误:
undefined utilities.js:230
Uncaught TypeError: Cannot read property 'toString' of undefined 发布于 2014-05-06 02:45:17
根据您的发现,似乎没有设置$_SESSION['userid']值,导致查询在第一次调用时失败。这也可能是完全不同的东西,你发布的错误似乎不是完整的信息。
您应该能够使用浏览器工具( CRUD.php ,F12)查看向页面发出的请求,以及响应的实际情况,因此是一个更完整的错误。
无论如何,您应该更好地处理错误,而不是简单地使用die()调用。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检查是否返回了ERROR,并相应地处理它。
https://stackoverflow.com/questions/23484924
复制相似问题