2

ここで何が間違っていますか?writeQuestionsオンロードで実行されないのはなぜですか(onclickではありません..)?

$(document).ready(function() {

$.getJSON("JavaScript/questions.json", function(data) {questions = data;});
    $("#start").one("click" , writeQuestions);
    writeQuestions();

 });

(この.one()行は私のコードではコメントアウトされています)

私がこれを行うとき:window.onload=writeQuestions;それは正常に動作します..

4

3 に答える 3

5

JSON の結果が返される前に writeQuestions() が実行されています。関数呼び出しをコールバック関数に入れます。

$(document).ready(function() {  
     $.getJSON("JavaScript/questions.json", 
          function(data) { questions = data; writeQuestions(); }
     ); 
}); 

また、パラメーターを受け入れるように writeQuestions() 関数を更新し、そのように質問を渡すことをお勧めします。可変スコープの問題があるため、これまでに機能したことに驚いています。

于 2011-05-19T13:41:05.460 に答える
4

やってみました...

$.getJSON("JavaScript/questions.json", function(data) {
    questions = data;
    writeQuestions();
});

あなたの例では、呼び出しが返さwriteQuestionsれる前に呼び出されます。getJSON

Fosco が彼の回答で指摘したように編集します。キーワードquestionsを使用しないため、ここではグローバル変数として宣言しています。varこれはうまくいくかもしれませんが、良い習慣ではなく、バグが発生しやすいです。次のように書き直すとよいでしょう。

$.getJSON("JavaScript/questions.json", function(data) {
    writeQuestions(data);
});
于 2011-05-19T13:40:29.220 に答える
0

質問は .getJSON() に読み込まれていますか? もしそうなら、成功させてみてください

$.getJSON("JavaScript/questions.json", function(data) {
    questions = data;
}).success(function() {writeQuestions();)
于 2011-05-19T13:45:49.643 に答える