// JSON. // -------------УСЛОВИЕ------------- // Загрузить используя XMLHttpRequest и распарсить как ассоциативный массив. // Организовать выбор страны и города, используя два select и ассоциативный массив из примера выше. // При выборе страны в списке городов должны быть только города из выбранной страны. // -------------РЕШЕНИЕ------------- //Начальная разметка const task01block = document.createElement('div'); task01block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px"; const task01title = document.createElement('h2'); task01title.innerText = 'Task-01 Countries choice'; const countrySelect = document.createElement('select'); const citySelect = document.createElement('select'); countrySelect.innerHTML = ""; countrySelect.style = "margin-left:10px; margin-right:10px"; citySelect.style = "margin-left:10px"; citySelect.innerHTML = ""; root.appendChild(task01block); task01block.appendChild(task01title); task01block.appendChild(countrySelect); task01block.appendChild(citySelect); //Подставляет страну из запроса function chooseCountry(responseObj) { const countryList = Object.keys(responseObj); const countryStr = countryList.sort().map(item =>(!(item===''))&&("")); countrySelect.innerHTML = "" + countryStr; countrySelect.onchange = () => { chooseCity(countrySelect.value, responseObj) } } //Подставляет города в зависимости от выбранной страны function chooseCity(countrySelected, responseObj) { const cityStr = responseObj[countrySelected].sort().map(item => ""); citySelect.innerHTML = "" + cityStr; } var request = new XMLHttpRequest() const url = 'https://raw.githubusercontent.com/David-Haim/CountriesToCitiesJSON/master/countriesToCities.json'; request.open('GET', url, true) // последний параметр указывает на синхронность или асинхронность запроса. В данном случае запрос асинхронный request.onreadystatechange = function(){ //обработчик изменения статуса запроса. Статус == 4 сигнализирует о том, что запрос окончен. if (request.readyState != 4){ return; } if (request.status == 200){ const responseObj = JSON.parse(request.responseText); chooseCountry(responseObj ); } else { alert('shit happens: ' + request.status + ', ' + request.statusText ); } } request.send() // инициируем запрос.