0

このエラーが発生する Google Closure コンパイラでコンパイルされた Javascript ファイルがあります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);
4

2 に答える 2

1

問題はここにあると思います:

var rawVocab = response[rawVocab];
var optionVocab = response[optionVocab];

プロパティアクセサーを適切に引用していません。これを試して :

var rawVocab = response['rawVocab'];
var optionVocab = response['optionVocab'];
于 2013-07-09T20:49:22.223 に答える
1

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
于 2013-07-09T23:59:23.767 に答える