Tutorials

Загрузка данных JSON

Этот проект показывает, как загрузить данные JSON двумя способами. Во-первых, из Asset в проекте. Во-вторых, по протоколу HTTP с удаленного сервера.

Загрузка JSON из Asset

Game.attributes.add('characterData', {
    type: 'asset',
    assetType: 'json'
});

//...

Game.prototype.parseCharacterData = function (data) {
    var names = [];

    // Чтение данных о персонажах из JSON-ресурса и возвращение списка имен
    var characters = data.characters;
    for (var i = 0; i < characters.length; i++) {
        var character = characters[i];
        names.push(character.firstName + ' ' + character.lastName);
    }

    return names;
};

//...

// Получение данных JSON из ресурса проекта
var characterData = this.characterData.resource;

// Разбор данных JSON
var names = this.parseCharacterData(characterData);

Вы можете видеть в приведенном выше коде, что все, что вам нужно сделать для загрузки данных JSON из ассетов вашего проекта, это использовать атрибут сценария типа 'asset' или получить ассет из реестра ассетов, а затем получить доступ к свойству resource. Для ассета типа json данные уже будут проанализированы в стандартный объект javascript при доступе к свойству resource.

После того, как у вас есть объект javascript, вы можете получить доступ к данным, как обычно. Например, перебирая свойства, как в parseCharacterData.

Загрузка JSON с удаленного сервера

Game.prototype.loadJsonFromRemote = function (url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.addEventListener("load", function () {
        callback(JSON.parse(this.response));
    });
    xhr.open("GET", url);
    xhr.send();
};

//...

// загрузить JSON с удаленного сервера
this.loadJsonFromRemote("https://api.github.com/", function (data) {
    // отобразить JSON данные с удаленного сервера
    el = document.querySelector("#xhr-json");
    el.textContent = JSON.stringify(data, null, 4);
});

В этом коде мы используем объект XMLHttpRequest (который является частью стандартного веб-браузерного API) для запроса JSON-данных с URL, в данном случае API Github.

После получения события "load" мы разбираем JSON-данные с помощью JSON.parse (еще одна часть стандартного веб-браузерного API) и возвращаем данные через функцию callback.

Обратите внимание, что вызов loadJsonFromRemote является асинхронным.

Вот полный список кода:

var Game = pc.createScript('game');

Game.attributes.add('display', {
    type: 'asset',
    assetType: 'html'
});

Game.attributes.add('style', {
    type: 'asset',
    assetType: 'css'
});

// Создать атрибут скрипта для включения перетаскивания и падения JSON-ассета с данными персонажа
Game.attributes.add('characterData', {
    type: 'asset',
    assetType: 'json'
});

// инициализировать код, вызываемый один раз для каждой сущности
Game.prototype.initialize = function() {
    this.initDisplay();

    var el;

    // Получить данные JSON из ассетов проекта
    var characterData = this.characterData.resource;

    // Разобрать данные JSON
    var names = this.parseCharacterData(characterData);

    // отображение имен персонажей
    el = document.querySelector("#character-name");
    el.textContent = names.join(", ");

    // отображение данных JSON из ассетов
    el = document.querySelector("#asset-json");
    el.textContent = JSON.stringify(characterData, null, 4);

    // загрузить JSON с удаленного сервера
    this.loadJsonFromRemote("https://api.github.com/", function (data) {
        // отображение данных JSON с удаленного сервера
        el = document.querySelector("#xhr-json");
        el.textContent = JSON.stringify(data, null, 4);
    });
};

Game.prototype.initDisplay = function () {
    var el = pc.createStyle(this.style.resource);
    document.head.appendChild(el);

    var div = document.createElement("div");
    div.setAttribute("id", "container");
    div.innerHTML = this.display.resource;
    document.body.appendChild(div);
};

Game.prototype.parseCharacterData = function (data) {
    var names = [];

    // Чтение данных персонажа из JSON-ассета, возвращение списка имен
    var characters = data.characters;
    for (var i = 0; i < characters.length; i++) {
        var character = characters[i];
        names.push(character.firstName + ' ' + character.lastName);
    }

    return names;
};

Game.prototype.loadJsonFromRemote = function (url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.addEventListener("load", function () {
        callback(JSON.parse(this.response));
    });
    xhr.open("GET", url);
    xhr.send();
};

Попробуйте проект самостоятельно.

This site is translated by the community. If you want to get involved visit this page