Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据库中的信息加载到Javascript游戏中_Javascript_Database_Google Closure - Fatal编程技术网

将数据库中的信息加载到Javascript游戏中

将数据库中的信息加载到Javascript游戏中,javascript,database,google-closure,Javascript,Database,Google Closure,我正在尝试使用Ajax从数据库中提取HTML5游戏的信息。从下面的代码中可以看到,我希望在PHP中回显JavaScript,以便它将存储在数据库中的变量推送到数组“rawVocab”和“optionVocab”中。但是当我检查这些数组的长度时,我发现它们是空的 此外,此行console.log(“Satus代码:”,request.getStatus(),“-”,request.getStatusText())似乎未被调用。我的eval()实现可能有问题。。。不确定 顺便说一下,我的代码使用Go

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

此外,此行
console.log(“Satus代码:”,request.getStatus(),“-”,request.getStatusText())似乎未被调用。我的eval()实现可能有问题。。。不确定

顺便说一下,我的代码使用Google闭包库

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。现在,您的代码容易受到注入攻击。例如,如果你的示例语句甚至包含一个“代码< >代码> >,那么你将产生一个JavaScript语法错误并杀死该代码块的其余部分。

< P> JSONE-EnCODE方法是好的,但是注意PHP的一些版本中的bug,其中JSONYEnEnCODE(数组(1.2))可以返回[1,2]而不是正确的[ 1.2 ]。'取决于区域设置。如果您从未在代码或任何库中调用setlocale(),那么您可能是安全的


我写了一个“minijson”(现在功能齐全)–它修复了这些问题,并且可以使用足够旧的PHP版本,而不需要json_编码(其许可证也有问题,这就是为什么它现在从发行版中删除的原因)。

非常感谢这个有用的答案,但实际上我的代码还不能工作。如果调用
alert(rawVocab.length),则使用我编写的代码我得到0。我可能犯了一个初学者的错误。我采纳了你的建议,并补充了一些关于这个问题的信息。如果你能看一看,我将不胜感激。别客气!我意识到了我的问题,它与我发布的“代码”完全无关(正如你所暗示的,它实际上是一个脚本点)。