使用游戏手柄触发 jquery ajax mysql 插入

Posted

技术标签:

【中文标题】使用游戏手柄触发 jquery ajax mysql 插入【英文标题】:Triggering jquery ajax mysql insert using a gamepad 【发布时间】:2018-02-08 05:23:20 【问题描述】:

我的这个小项目涉及注册与游戏板上按下的按钮相关的动作(记录为 PS3 风格)。因为 html5 支持游戏手柄,所以我决定使用它作为一种快速而简单的开发方式。

问题是,当运行ajax和调用php脚本时,按下按钮后,插入语句被重复。当我设置 async: false 并使用 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 的了解非常基础,所以如果有更多经验的人可以指出我做错了什么,我将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

您链接的 tuts+ 教程有一些代码可以为 Chrome 设置轮询间隔,以解决游戏手柄连接事件中的不可靠性问题:

//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);

This bug 在最新版本的 Chrome 中已修复,解决方法可能会导致您的问题。例如,如果 checkGP 在收到 gamepadconnected 事件之前触发,您可以注册两次 reportOnGamepad 间隔。

【讨论】:

感谢您的回复。所以,解决方案可能一直摆在我面前……我会在几个小时内对其进行测试,然后返回结果,以备记录。但问题的一部分仍然存在,Firefox 也会复制数据库中的插入,除非 async 未设置为 false。 最后我决定使用python和evdev。更简单、更快捷。

以上是关于使用游戏手柄触发 jquery ajax mysql 插入的主要内容,如果未能解决你的问题,请参考以下文章

当我在模拟器中按下 Apple TV 游戏手柄按钮时,它们不会触发

Psychopy IO 游戏手柄

将游戏手柄数据传递到 Windows

游戏手柄热插拔不起作用

ECharts+PHP+MySQ+ Ajax 实现图表绘制

如何使用 AJAX 自动完成触发 JQuery