javascript - 将信息从数据库加载到 Javascript 游戏中

标签 javascript database google-closure

我正在尝试使用 Ajax 从 HTML 5 游戏的数据库中提取信息。正如您从下面的代码中看到的,我想在 PHP 中回显 JavaScript,以便它将数据库中存储的变量推送到数组“rawVocab”和“optionVocab”中。但是当我检查这些数组的长度时,我发现它们是空的。

此外,这行 console.log("Satus code: ", request.getStatus(), "- ", request.getStatusText()); 似乎没有被调用。我的 eval() 实现可能有问题......不确定。

顺便说一下,我的代码使用了 Google Closure 库。

var rawVocab = new Array();
var optionVocab = new Array();

var request = new goog.net.XhrIo();

goog.events.listen(request, "complete", function(){

    if (request.isSuccess()) {

        response = request.getResponseText();
        eval(response);

        // print confirm to the console
        console.log("Satus code: ", request.getStatus(), " - ", request.getStatusText());

    } else {

        // print error info to the console
        console.log(
        "Something went wrong in the ajax call. Error code: ", request.getLastErrorCode(),
        " - message: ", request.getLastError()
        );

    }

});

request.send("load_vocab.php");

这是 load_vocab.php...

$data = array();

try {
    $conn = new PDO('mysql:host=localhost;dbname=tygrif_school', $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $conn->prepare('SELECT word, translation, example_sentence_1 FROM vocabulary_game WHERE game_type = :game_type');
    $stmt->execute(array('game_type' => 'target'));

    while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
       $data['rawVocab'][] = $row;
    }

    $stmt = $conn->prepare('SELECT word, translation, example_sentence_1 FROM vocabulary_game');
    $stmt->execute(array());

    while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
        $data['optionVocab'][] = $row;
    }
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}

echo json_encode($data);

最佳答案

不要这样做。您最好构建一个 PHP 数组,然后通过 JSON 将其发送到客户端,例如

$data = array();

SELECT word, translation, example_sentence_1 FROM ...

while ($row = $stmt->fetch()) {
   $data['rawvobab'][] = $row;
}

SELECT ...

while (...) {
    $data['optionVocab'][] = $row;
}

echo json_encode($data);

使用 json_encode 确保您发送给客户端的“代码”在语法上是有效的 Javascript。现在您的代码很容易受到注入(inject)攻击。例如。考虑一下如果您的示例句子仅包含一个 ' 会发生什么 - 您将产生一个 javascript 语法错误并杀死该代码块的其余部分。

关于javascript - 将信息从数据库加载到 Javascript 游戏中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17530682/

相关文章:

javascript - JSC_TRAILING_COMMA : Parse error. IE8(及更低版本)- jshint 可以警告我左尾随逗号吗?

javascript - 为什么要在标记点击事件上重新渲染 map ?

javascript - 未捕获语法错误 : Unexpected token ) JavaScript

javascript - 如何验证 v-datatable 中的 v-edit-dialog

database - 多个应用程序可以访问一个 SQLite 数据库吗?

mysql - 我需要为 SQL 中的 bool 列提供引用表吗?

ClojureScript google 闭包代码分割部分加载

javascript - 简单的字符串拆分返回对象而不是数组

mysql - 计算mysql中表的行数

google-closure-compiler - 使用console.time