Javascript Google闭包编译文件中的TypeError
我有一个用谷歌闭包编译器编译的Javascript文件,它给了我这个错误Javascript Google闭包编译文件中的TypeError,javascript,json,google-closure,Javascript,Json,Google Closure,我有一个用谷歌闭包编译器编译的Javascript文件,它给了我这个错误TypeError:f是未定义的。当我查看编译后的代码时,不可能理解,但是其中的一部分被注释掉了。我真的很困惑为什么会出现这个错误,但我怀疑这与下面的脚本有关(这是我自出现这个错误以来唯一编辑过的脚本) 这里还有load_vocab.php try { $conn = new PDO('mysql:host=localhost;dbname=tygrif_school', $username, $password);
TypeError:f是未定义的。当我查看编译后的代码时,不可能理解,但是其中的一部分被注释掉了。我真的很困惑为什么会出现这个错误,但我怀疑这与下面的脚本有关(这是我自出现这个错误以来唯一编辑过的脚本)
这里还有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);
我认为问题在于:
var rawVocab = response[rawVocab];
var optionVocab = response[optionVocab];
您没有正确引用属性访问器。试试这个:
var rawVocab = response['rawVocab'];
var optionVocab = response['optionVocab'];
您知道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
在阅读你的信息之前,我才意识到这一点,但我非常感谢你的解释。这件事快把我逼疯了。有什么方法可以使请求同步,还是我必须重新安排脚本?@niftygrifty您必须重新安排,因为使用同步请求不好(不确定goog.netXhrIo是否支持它)。您可以在if(request.issucess()){
块中处理响应。
Sending request
Trying to read response
Error
Now the response returned, setting response variable