Ошибка типа из скомпилированного файла Google Closure
У меня есть файл Javascript, скомпилированный с помощью компилятора Google Closure, который дает мне эту ошибку TypeError: f is undefined
, Когда я смотрю на скомпилированный код, это невозможно понять, но его часть закомментирована. Я действительно озадачен тем, почему я получаю эту ошибку, но я подозреваю, что она имеет какое-то отношение к следующему сценарию (это единственное, что я редактировал после получения этой ошибки).
var response;
var request = new goog.net.XhrIo();
goog.events.listen(request, "complete", function(){
if (request.isSuccess()) {
response = request.getResponseText();
console.log("Satus code: ", request.getStatus(), " - ", request.getStatusText());
} else {
console.log(
"Something went wrong in the ajax call. Error code: ", request.getLastErrorCode(),
" - message: ", request.getLastError()
);
}
});
request.send("load_vocab.php");
var rawVocab = response[rawVocab];
var optionVocab = response[optionVocab];
alert(rawVocab.length);
alert(optionVocab.length);
Вот также load_vocab.php...
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 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);
2 ответа
Вы знаете, что запросы xhr асинхронны?
Это означает, что когда вы вызываете send, вы должны ждать возврата ответа, и вы пытаетесь прочитать ответ на следующей строке. Ваша кавычка также является проблемой, компилятор переименует rawVocab и optionVocab, но возвращенные данные не будут переименованы, поэтому вам нужно заключить эти значения в кавычки, как указано ne8il.
var response;
var request = new goog.net.XhrIo();
goog.events.listen(request, "complete", function(){
if (request.isSuccess()) {
window['console'].log("Now the response returned, setting response variable");
response = request.getResponseText();
console.log("Satus code: ", request.getStatus(), " - ", request.getStatusText());
} else {
console.log(
"Something went wrong in the ajax call. Error code: ", request.getLastErrorCode(),
" - message: ", request.getLastError()
);
}
});
window['console'].log("Sending request");
request.send("load_vocab.php");
window['console'].log("Trying to read response");
var rawVocab = response['rawVocab'];
var optionVocab = response['optionVocab'];
Вывод приведенного выше кода будет:
Sending request
Trying to read response
Error
Now the response returned, setting response variable
Я думаю, что проблема здесь:
var rawVocab = response[rawVocab];
var optionVocab = response[optionVocab];
Вы не цитируете свои права собственности должным образом. Попробуй это:
var rawVocab = response['rawVocab'];
var optionVocab = response['optionVocab'];