0

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

2 に答える 2

0

json_encode メソッドは問題ありませんが、PHP の一部のバージョンでは、ロケール設定に応じて json_encode(array(1.2)) が正しい '[1.2]' ではなく '[1,2]' を返すバグに注意してください。ただし、コードまたはライブラリのいずれかで setlocale() を呼び出さない場合は、おそらく安全です。

私は "minijson" を書きました (現在はフル機能ですが) – https://fusionforge.org/plugins/scmgit/cgi-bin/gitweb.cgi?p=fusionforge/fusionforge.git;a=blob;f=src/ common/include/minijson.php;h=c9020f4e7b826a88851b1149ddeb10a682f777c9;hb=HEAD – これらの問題を修正し、json_encode を持たないほど古いバージョンの PHP動作します (ライセンスにも問題があるため、現在ディストリビューションから削除されています)。

于 2013-07-08T15:50:51.650 に答える