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