2011-05-19 108 views
2

我在做什麼錯在這裏?爲什麼writeQuestions不帶負載運行(不是的onclick ..)?

$(document).ready(function() { 

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

}); 

(中.one()行註釋掉在我的代碼)

當我這樣做:window.onload=writeQuestions;它工作正常..

+0

是您在.getJSON()中加載的問題嗎? – 2011-05-19 13:42:40

回答

4

writeQuestions()在返回JSON結果之前運行。將函數調用放入回調函數中。

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

另外,我建議更新writeQuestions()函數接受一個參數,並通過這種方式問題。我很驚訝它曾經工作過,因爲存在可變範圍問題。

+0

它的工作原理!但我怎麼知道結果還沒有返回呢?是不是它假設在我的代碼中執行'writeQuestions'之前被返回? – ilyo 2011-05-19 13:44:36

+0

+1對變量作用域的評論 – fearofawhackplanet 2011-05-19 13:44:58

+0

@ilyad不,getJSON函數異步運行。它開始這樣做,並繼續其餘的代碼。您在getJSON調用中提供的匿名函數是在返回結果後運行的。這是您放置需要接收數據的代碼的地方。 – Fosco 2011-05-19 13:47:03

4

你試過......

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

在您的示例中writeQuestions將在getJSON調用返回之前調用。

編輯如Fosco在他的回答中指出,您聲明questions作爲一個全局變量在這裏只要你不使用var關鍵字。這可能會起作用,但這不是好的做法,並且容易出錯。最好重寫爲:

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

thanx,相關提示 – ilyo 2011-05-20 08:04:42

0

是在.getJSON()中加載的問題嗎? 如果是這樣,請嘗試投入成功

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