2016-01-02 2 views
1

Каков наилучший способ просто захватить содержимое .json и сохранить его в var? Я видел некоторые темы, но я просто не могу управлять на моем коде ...Получите контент от .json и напишите переменной

function retrieve_json() { 
    var content; 
    $.when(
    $.getJSON("http://localhost/browsergame/data/test.json", function(data) { 
     content = data; 
    }) 
).then(function() { 
    console.log(content); 
    return content; 
    }); 
} 

var json_content = retrieve_json(); 
console.log (json_content); 

console.log в функции отображает правильное содержание JSON, в console.log в самом конце моего кода показывает «undefined». Я предполагаю, что асинхронная проблема является основной проблемой здесь. Я пробовал делать это с $ .ajax, но не мог справиться. Итак, что является лучшим способом просто захватить содержимое файла .json и сохранить его в var?

+0

Вы должны переменные после загрузки json. –

+0

использовать 'var json_content = retrieve_json(); console.log (json_content); 'after' content = data; ' –

+0

Возврат внутри вложенной функции не возвращается к внешней функции .... даже если это было сделано, ajax является асинхронным – charlietfl

ответ

0

После того как код является асинхронным, его нельзя сделать синхронным. Вы можете только надежно использовать содержимое своего JSON в функциях, которые вы передаете обещаниям или в качестве обратных вызовов, иначе у вас нет гарантии, что ваш JSON был извлечен, когда ваш код будет выполнен.

Если вы обнаружите, что синтаксис обещаний ужасный, вас может заинтересовать async/await, предлагаемый синтаксис для ES7, который может быть передан в ES5 прямо сейчас with Babel.

Вот хорошая статья, которая демонстрирует различные подходы к асинхронному программированию в JavaScript: The long road to Async/Await in JavaScript.

1

Проблема заключается в том, что retrieve_json не останавливается и ждет, пока json не прибудет с сервера. Выполнение продолжается с тем, что есть после утверждения, начинающегося с вашего $ .when. В этом случае это конец функции. Поскольку здесь нет оператора return, функция возвращает значение «undefined», которое вы храните в json_content.

Если вы хотите прекратить выполнение до тех пор, пока ответ не вернется, вам необходимо выполнить следующие шаги в функции и, например, вызвать его в методе «then» вашего примера или просто передать его в getJSON, где вы храните его в теперь переменная содержимого.

И убедитесь, что вы прочитали, как работают обещания.

Смежные вопросы