【发布时间】:2016-11-07 18:55:24
【问题描述】:
我目前正在开发一个遥控应用程序,我正在尝试将操纵杆坐标从 Javascript 发送到 PHP。但是,当我收到未定义索引错误时,我永远无法通过 PHP 文件访问数据。
我知道这个问题已经被解决了很多次,但是我在过去的一周里浏览了论坛和谷歌,我尝试过的解决方案都没有奏效,所以如果有人可以看看,我将不胜感激我的代码,看看我是否有一些基本的误解或特定于应用程序的问题。
编辑:我之前忘了提这个,但是我尝试了一些其他人在网上发布的示例 PHP/AJAX 代码,并且运行该代码也不起作用,这让我认为这可能是我的服务器的问题配置。
我的代码:(仅包括我认为与问题相关的文件;如果您想查看项目中的其他文件,请告诉我。) JavaScript 和 PHP 文件位于同一目录中。我正在使用 XAMPP。
joystick.js(包含 ajax 调用)
var hasGP = false;
var repGP;
// Joystick State Variables
var triggerPressed;
var x_value;
var y_value;
var z_value;
var t_value;
function canGame()
{
return "getGamepads" in navigator;
}
function reportOnGamepad()
{
// Display the gamepad's ID.
var gp = navigator.getGamepads()[0];
var html = "";
html += "<u>ID</u>: " + gp.id + "<br>";
// Display the status of the x-axis.
x_value = gp.axes[0];
html += "<u>x-axis</u>: " + x_value + "<br>";
// Display the status of the y-axis.
trigger_pressed = gp.buttons[0].pressed;
y_value = gp.axes[1];
if (trigger_pressed)
{
html += "<u>Pitch angle</u>: " + y_value + "<br>";
}
else
{
html += "<u>y-axis</u>: " + y_value + "<br>";
}
// Display the status of the z-axis.
z_value = gp.axes[3];
html += "<u>z-axis</u>: " + z_value + "<br>";
// Display the status of the t-axis.
t_value = gp.axes[2];
html += "<u>Roll angle</u>: " + t_value + "<br>";
$("#gamepadDisplay").html(html);
$.ajax({ url: 'ajax.php',
type: 'POST',
data: {x:x_value},
success: function(data)
{
console.log("x_value " + data + " has been sent to the server.");
}
});
}
$(document).ready(function()
{
if(canGame())
{
var prompt = "To begin using your gamepad, connect it and press any button!";
$("#gamepadPrompt").text(prompt);
$(window).on("gamepadconnected", function()
{
hasGP = true;
$("#gamepadPrompt").html("<b>The gamepad has been successfully connected.</b><br><br>");
console.log("connection event");
repGP = window.setInterval(reportOnGamepad,100);
});
$(window).on("gamepaddisconnected", function()
{
console.log("disconnection event");
$("#gamepadPrompt").text(prompt);
window.clearInterval(repGP);
});
// Set up an interval for Chrome
var checkGP = window.setInterval(function()
{
console.log('checkGP');
if(navigator.getGamepads()[0])
{
if(!hasGP) $(window).trigger("gamepadconnected");
window.clearInterval(checkGP);
}
}, 500);
}
});
ajax.php(Javascript 数据应该发送到的文件)
<?php
$temp = $_POST['x'];
if(isset($temp) && !empty($temp))
{
echo "x value is ". $temp ."!"; // Success Message
}
?>
错误信息:
注意:未定义索引:第 2 行 C:\xampp\htdocs\TeachMoverInterface\ajax.php 中的 x
PHP $_POST 数组似乎为空。
可能有用的浏览器调试信息:
正如我所说,过去一周我一直在查看论坛,因此我尝试解决问题的一些操作是更改格式,更改 ajax 方法中的缓存和异步属性,替换 ajax用 $.post 调用或 XMLHttpRequest 调用,用 ajax 调用中的数字替换 JavaScript 变量,以及我忘记的其他一些方法。
【问题讨论】:
-
如果
$_POST数组为空,您如何获得屏幕截图中显示的消息(即“x 值为...”)? -
如果你在
var_dump()$_POST变量的开头会发生什么?我想知道 0.00684... 是否被四舍五入为零,随后在您的empty()支票中为“假”。 -
发生该错误时对服务器的请求是什么样的?您正在显示一个成功的通话。
-
如果直接加载 ajax.php,
$_POST数组未设置,因此未定义。您必须像处理 AJAX 调用一样将变量发送到 ajax.php(通过 POST)。 -
@Gopika 这里要注意一点——如果你正在制作游戏,那么使用 AJAX 请求发送操纵杆位置将会非常滞后,因为 HTTP 请求通常会产生很大的开销。您可能应该考虑使用 Web 套接字建立单个套接字连接,然后将控制器位置实时传送到服务器。
标签: javascript php jquery ajax xampp