Я работаю на одном сайте страницы, в котором данные из одного json-файла отображаются по-разному в разных разделах - ничего не отображается при загрузке, но только после события click. Я немного узнал о том, как вызывающие вызовы подключились к сети, но по мере того, как я почти закончил это, я понял, насколько ошибочна концепция, поэтому теперь я вернулся к чертежной доске.Доступ к данным, возвращаемым с помощью запроса ajax при загрузке
Теперь я хочу, чтобы вызов ajax был загружен, установите результат json как переменную, доступную нескольким функциям. Я думал, что бы что-то вроде этого:
window.onload = function() {
var myJsonData = function() {
var request = new XMLHttpRequest();
request.open("GET", "/json/someJsonData.json", true);
request.setRequestHeader("content-type", "application/json");
request.send(null);
request.onreadystatechange = function() {
if (request.readyState === 4) {
if (request.status === 200) {
var myJsonString = JSON.parse(request.responseText);
var myJsonArray = myJsonString["Projects"];
return myJsonArray;
}
}
} // onreadystatechange
} // var myJsonData
myJsonData(); // *
console.log("myJsonArray: " + myJsonArray); // undefined
Или:
window.onload = function() {
myJsonData();
}
function myJsonData() {
var request = new XMLHttpRequest();
request.open("GET", "/json/someJsonData.json", true);
request.setRequestHeader("content-type", "application/json");
request.send(null);
request.onreadystatechange = function() {
if (request.readyState === 4) {
if (request.status === 200) {
var myJsonString = JSON.parse(request.responseText);
var myJsonArray = myJsonString["Projects"];
alert("you are here (myJsonArray defined)");
alert("myJsonArray: " + myJsonArray);
console.log("myJsonArray: " + myJsonArray);
return myJsonArray;
}
}
} // onreadystatechange
} // var myJsonData
console.log("myJsonArray: " + myJsonArray); // undefined
Или:
window.onload = myJsonData;
// etc.
Конечно myJsonArray не определен либо образом. Мне явно не хватает чего-то фундаментального в том, как это сделать (или это вообще плохая идея?). Есть ли способ передать результат в качестве обратного вызова при вызове ajax-запроса при загрузке?
Может кто-нибудь, пожалуйста, просветит меня о том, как исходить из этого, возможно, скелетный пример? (Приписка еще сосредоточив внимание на родных JS, не JQuery)
Большое спасибо заранее,
SVS
асинхронной/запрос синхронизации ... прочитать [здесь] (http://www.w3schools.com/ajax/ajax_xmlhttprequest_send. asp), установите последний параметр в 'false'. – skobaljic
@skobaljic Спасибо. Я немного удивлен, увидев предложение пойти на синхронизацию, кажется, противоречит всему, что я читал о синхронизации/асинхронном режиме. Даже страница, на которую вы ссылались, говорит: «Использование async = false не рекомендуется». Будет ли более целесообразным или более традиционным изменение структуры? – user1613163
Вы можете использовать async, но только после того, как вы получите ответ json, вы можете вызвать функцию «init» приложения, определить переменные приложения и т. Д. Поскольку эти данные важны, вы можете начать загрузку с самого начала на странице, ожидая, что данные будут доступный на главной странице. Во время загрузки вы можете поместить загрузчик. Но то, что вы не можете сделать, это: return 'myJsonArray' для' function myJsonData() 'внутри асинхронного вызова xhr. – skobaljic