it-roy-ru.com

загрузить 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, текст ответа остается нулевым. Кажется, вам нужно использовать функцию обратного вызова, чтобы вернуть текст ответа, так как он срабатывает при успехе.

Это не может быть так сложно! Правильно?

47
Aaron

Это сделает это:

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 . Обратите внимание, что синхронные запросы могут временно заблокировать браузер, отключение любых действий во время запрос активен.

121
karim79

код должен читать:

var my_json;
$.getJSON(my_url, function(json) {
  my_json = json;
});
27
CountZero

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>

0
Rodrigo Slompo
  • это получит файл 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);

0
Noel Sasikanth
<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);
    });

enter image description here enter image description here

0
MAFAIZ