Этот мой маленький проект включает в себя регистрацию действий, связанных с кнопками, нажатыми на геймпаде (стиль PS3 для записи). Поскольку html5 поддерживает геймпады, я решил использовать его как быстрый и простой способ разработки.
Дело в том, что при запуске ajax и вызове скрипта php после нажатия кнопки оператор вставки дублируется. Это не происходит, когда я установил асинхронный: ложный и использовать Firefox, но это идет вразрез с целью ajax, и из того, что я прочитал, не изящная вещь, которую нужно делать.
Это то, что у меня есть в моем index.html (позаимствовано здесь https://gamedevelopment.tutsplus.com/tutorials/using-the-html5-gamepad-api-to-add-controller-support-to-browser-games—cms-21345)
function reportOnGamepad() {
var gp = navigator.getGamepads()[0];
var html = "";
html += "id: "+gp.id+"<br/>";
html += "timestamp: "+gp.timestamp+"<br/>";
html += "<br/>move<br/>"
if (gp.buttons[0].pressed) { var moves=" B1"; $.ajax({
url:'my.php',
method:'POST',
data:{
moves: moves
},
}); html+= " <br/>";
};
и мой my.php
$conn = new mysqli($servername, $username, $password, $dbname);
$moves = $_POST['moves'];
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO test (moves) VALUES ('$moves')";
$conn->query($sql);
$conn->close();
Простые вещи, как вы можете видеть. Мои знания jquery / javascript очень просты, поэтому, если кто-то с большим опытом может указать мне, что я делаю неправильно, я буду очень признателен. Спасибо.
Учебное пособие tuts +, которое вы связали, содержит некоторый код для установки интервала опроса для Chrome в качестве обходного пути ненадежности в событии gamepadconnected:
//setup 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);
Эта ошибка исправлено в последней версии Chrome, и проблема может быть вызвана обходным решением. Например, если checkGP срабатывает до получения события gamepadconnected, вы можете зарегистрировать интервал reportOnGamepad дважды.
Других решений пока нет …