2016-05-07 3 views
0

Когда моя страница загружается, я хочу сразу же вытащить данные JSON с другого сервера с помощью $ .ajax(), и я хочу иметь доступ ко всем данным без повторного запроса json-файла. Проблема в том, что когда я присваиваю данные переменной, объем этой переменной ограничивается функцией $ .ajax(), и я не могу получить к ней доступ в другом месте ...Загрузите внешний JSON один раз, используйте его повторно ....?

Похоже, поскольку у меня уже есть загрузив эту информацию, я должен буду использовать ее столько раз, сколько мне нужно, не перепросив ее снова и снова (медленно). Используя простой запрос reddit.json, например ниже

$(document).ready(function(){ 
    $.ajax({ 
     type: "GET", 
     url: 'https://www.reddit.com/.json', 
     timeout:3000, 
     dataType: 'JSON', 
     jsonpCallback: 'callback', 
     success: function(data) { 
      console.log(data); 
      var myData = data; //this variable is confined :(
     }, 
     error: function(){ 
      console.log('error'); 
     } 
    }); 
}); 

Если я запускаю его вне от document.ready(), то я могу получить к нему во всем мире, но я не знаю, если это было прохладно или нет, или как лучших практики, вы знаете ...

Будет лучшего способ получить доступ к уже загруженному объекту JSon вне области видимости функции, что сделал это первоначальный запрос? Или это даже возможно ...?

+0

Пока вы можете гарантировать, что данные будут доступны только через * после завершения запроса Ajax, вы можете хранить его там, где хотите. Например. если вам нужно получить доступ к данным в обработчиках событий, привяжите обработчики событий только * после завершения запроса. –

+0

Если вы используете глобальную переменную, данные JSON могут использоваться совместно с любым вызывающим абонентом, предназначенным или нет. – Sparky256

+0

Связанный: [Как вернуть ответ от асинхронного вызова?] (Https://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous-call/14220321) –

ответ

0

Вы можете использовать любой из двух вариантов, приведенных ниже.

1.Declare глобальная переменная перед функцией $ (document) .ready(). Затем используйте ее внутри, как показано ниже.

<script> 
var myData; 
$(document).ready(function(){ 
$.ajax({ 
    type: "GET", 
    url: 'https://www.reddit.com/.json', 
    timeout:3000, 
    dataType: 'JSON', 
    jsonpCallback: 'callback', 
    success: function(data) { 
     console.log(data); 
     myData = data; //this variable is confined :(
    }, 
    error: function(){ 
     console.log('error'); 
    } 
}); 
}); 
</script> 

2. Поместите свои данные в хранилище сеансов HTML5 или локальное хранилище в зависимости от ваших требований. См. Ниже.

<script> 
$(document).ready(function(){ 
$.ajax({ 
    type: "GET", 
    url: 'https://www.reddit.com/.json', 
    timeout:3000, 
    dataType: 'JSON', 
    jsonpCallback: 'callback', 
    success: function(data) { 
     console.log(data); 
     sessionStorage.myData=data; //setting variable in session storage 
     console.log(sessionStorage.myData); // getting variable from ss 
     // for local storage replace sessionStorage with localStorage in above two lines 
    }, 
    error: function(){ 
     console.log('error'); 
    } 
}); 
}); 
</script> 
+0

Это привело к запуску моего проекта, но проверьте связанный пост @FelixKling под моим первоначальным вопросом ... действительно хорошая информация есть. Я использовал метод 1 бит ... – TJBlackman

0

Загрузите все с AJAX, а затем вы можете написать его в файл или поместить его в глобальный массив, который можно получить доступ всюду