MAMPローカルApacheとmySQLサーバーを使用してアプリケーションをテストしていますが、成功出力で「null」値を取得し続けるため、コードがjQueryajax関数を介してデータを適切に渡していないようです。通常、ローカルサーバーと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)と表示され、「undefined」と表示されます。理由はわかりません。ありがとうございました。