Загрузить JSON в переменную
Я должен сделать что-то очень простое, но, насколько я могу судить, не существует простого способа сделать это. Я просто хочу загрузить данные JSON из удаленного источника и сохранить их в глобальной переменной Javascript с помощью jQuery. Вот что у меня есть:
var my_json;
$.getJSON(my_url, function(json) {
var my_json = json;
});
Переменная my_json остается неопределенной. Я думаю, что это явно вопрос сферы. Мне кажется, что метод $.getJSON должен возвращать JSON, но он возвращает объект XMLHttpRequest. Если я сделаю это:
request = $.getJSON(my_url);
my_json = request.responseText.evalJSON();
Это не работает, потому что, пока readystate == 4, текст ответа остается нулевым. Кажется, вам нужно использовать функцию обратного вызова, чтобы вернуть текст ответа, так как он срабатывает при успехе.
Это не может быть так сложно! Правильно?
5 ответов
Это сделает это:
var json = (function () {
var json = null;
$.ajax({
'async': false,
'global': false,
'url': my_url,
'dataType': "json",
'success': function (data) {
json = data;
}
});
return json;
})();
Основная проблема в том, что $.getJSON
будет выполняться асинхронно, таким образом, ваш Javascript будет проходить мимо выражения, которое вызывает его еще до того, как success
обратный вызов срабатывает, поэтому нет никаких гарантий, что ваша переменная будет захватывать какие-либо данные.
Обратите внимание, в частности, на 'async': false
Опция в вышеупомянутом вызове ajax. В руководстве сказано:
По умолчанию все запросы отправляются асинхронно (т.е. по умолчанию установлено значение true). Если вам нужны синхронные запросы, установите для этого параметра значение false. Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия, когда запрос активен.
Код должен читать:
var my_json;
$.getJSON(my_url, function(json) {
my_json = json;
});
- это получит файл JSON извне в вашу переменную javascript.
теперь этот sample_data будет содержать значения файла JSON.
var sample_data = ''; $.getJSON("sample.json", function (data) { sample_data = data; $.each(data, function (key, value) { console.log(sample_data);
var itens = null;
$.getJSON("yourfile.json", function(data) {
itens = data;
itens.forEach(function(item) {
console.log(item);
});
});
console.log(itens);
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
</head>
<body>
</body>
</html>
<input class="pull-right" id="currSpecID" name="currSpecID" value="">
$.get("http://localhost:8080/HIS_API/rest/MriSpecimen/getMaxSpecimenID", function(data, status){
alert("Data: " + data + "\nStatus: " + status);
$("#currSpecID").val(data);
});