2

我正在使用 MAMP 本地 Apache 和 mySQL 服务器测试应用程序,但是我的代码似乎没有通过 jQuery ajax 函数正确传递数据,因为我在成功输出中不断获得“空”值。我不确定使用本地服务器和 jQuery ajax 通常是否有问题,或者我的代码有问题。这里供参考:

JS 文件:

var curX = 2;
var curY = 6;

function boundary(moveX, moveY) {
var world = document.getElementById('overworld');
$.ajax({
    type: "POST",
    url: "php/tilecheck.php",
    dataType: "json",
    data: {x: curX + moveX, y: curY + moveY},
    success: function(data) {
        curX += moveX;
        curY += moveY;

        var left = data.lefttile;
        var right = data.righttile;
        var top = data.toptile;
        var bot = data.bottomtile;
        var xypos = document.getElementById("coord");
        xypos.innerText = curX + ", " + curY;

        if(left == 1){
            $("#aleft").css('display', 'none');
        }
        else {
            $("#aleft").css('display', '');
        }
        if(right == 1){
            $("#aright").css('display', 'none');
        }
        else {
            $("#aright").css('display', '');
        }

        if(top == 1){
            $("#atop").css('display', 'none');
        }
        else {
            $("#atop").css('display', '');
        }
        if(bot == 1){
            $("#abottom").css('display', 'none');
        }
        else {
            $("#abottom").css('display', '');
        }
        world.style.marginTop = -curX * 351 +"px";
        world.style.marginLeft = -curY * 351 +"px";
    }
});
}

我在 html 文件中调用 onload :

<html>
<head>
    <script src="jquery-1.8.2.js"></script>
    <script src="game/bound.js"></script>
</head>
<body onload="boundary(0,0);">

这是我在 ajax 函数中调用的“tilecheck.php”代码:

<?php
    mysql_connect('localhost', 'root', 'root') or die ('Error Connecting');
    mysql_select_db('testing_db') or die ('No Database');

    $x = $_REQUEST['x'];
    $y = $_REQUEST['y'];

    $q = "SELECT bound FROM tiles WHERE xpos = ".($x - 1)." AND ypos = $y LIMIT 1";
    $lefttile = mysql_fetch_assoc(mysql_query($q));

    $q = "SELECT bound FROM tiles WHERE xpos = ".($x + 1)." AND ypos = $y LIMIT 1";
    $righttile = mysql_fetch_assoc(mysql_query($q));

    $q = "SELECT bound FROM tiles WHERE xpos = $x AND ypos = ".($y - 1)." LIMIT 1";
    $toptile = mysql_fetch_assoc(mysql_query($q));

    $q = "SELECT bound FROM tiles WHERE xpos = $x AND ypos = ".($y + 1)." LIMIT 1";
    $bottomtile = mysql_fetch_assoc(mysql_query($q));

    $json = array(
    "x" => $x,
    "y" => $y,
    "lefttile" => $lefttile, "righttile" => $righttile,
    "toptile" => $toptile, "bottomtile" => $bottomtile
);

$output = json_encode($json);
echo $output;

?>

我想要代码做的是从数据库中获取一个值并根据值隐藏或显示箭头按钮。如果您有任何其他问题,请告诉我您的想法。谢谢你。

更新

我稍微摆弄了一下代码,将 ajax 函数更改为一个帖子:

$.post('php/tilecheck.php', {x: curX + moveX, y: curY + moveY}, function(data) {
    console.log(data);

并将 php 中的 $_REQUEST 更改为 $_POST。运行此脚本时的控制台显示:

{"lefttile":"1","righttile":"1","toptile":"0","bottomtile":"1"} 

当变量传递“1”(我在 mySQL 中调用的绑定行的值)时,相应的箭头应该消失。但是,当我警告我定义的变量(var left = data.lefttile)并且控制台显示的变量已定义(在本例中为 1)时,它显示为“未定义”。我不确定为什么。谢谢你。

4

0 回答 0