jQuery, выполняющий функцию внутри $(document).ready(function() {

Что я здесь не так делаю? Зачем writeQuestions не работает под нагрузкой (не по клику..)?

$(document).ready(function() {

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

 });

(.one() строка закомментирована в моем коде)

Когда я делаю это:window.onload=writeQuestions; работает нормально..

3 ответа

Решение

writeQuestions() выполняется до того, как будет возвращен результат JSON. Поместите вызов функции в функцию обратного вызова.

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

Также я бы порекомендовал обновить функцию writeQuestions(), чтобы она принимала параметр, и таким образом передавать вопросы. Я удивлен, что это когда-либо работало, так как существуют проблемы с переменным объемом

Ты пытался...

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

В вашем примере writeQuestions будет вызван до getJSON звонок вернулся.

Отредактируйте, как Фоско указал в своем ответе, вы заявляете questions в качестве глобальной переменной здесь, так как вы не используете var ключевое слово. Это может сработать, но это не очень хорошая практика и подвержена ошибкам. Было бы лучше переписать как:

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

Ваши вопросы загружены в.getJSON()? Если так, попробуйте добиться успеха

$.getJSON("JavaScript/questions.json", function(data) {
    questions = data;
}).success(function() {writeQuestions();)
Другие вопросы по тегам