Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Promise подгрузка контента с .json (https://javascript.ru/forum/misc/62987-promise-podgruzka-kontenta-s-json.html)

destus 07.06.2016 09:07

Blondinka,
JSON структура неправильная. Должно быть так

cityList.json
[
  {"_id":707860,"name":"Hurzuf","country":"UA","coord":{"lon":34.283333,"lat":44.549999}},
  {"_id":519188,"name":"Novinki","country":"RU","coord":{"lon":37.666668,"lat":55.683334}},
  {"_id":1283378,"name":"Gorkhā","country":"NP","coord":{"lon":84.633331,"lat":28}},
  {"_id":1270260,"name":"State of Haryāna","country":"IN","coord":{"lon":76,"lat":29}},
  {"_id":708546,"name":"Holubynka","country":"UA","coord":{"lon":33.900002,"lat":44.599998}},
  {"_id":1283710,"name":"Bāgmatī Zone","country":"NP","coord":{"lon":85.416664,"lat":28}},
  {"_id":529334,"name":"Mar’ina Roshcha","country":"RU","coord":{"lon":37.611111,"lat":55.796391}}
]


.js
function get(url) {
    return new Promise(function(resolve, reject) {
        var req = new XMLHttpRequest();
        req.open('GET', url);

        req.onload = function() {
            if (req.status == 200) {
                resolve(JSON.parse(req.response));
            }
            else {
                reject(Error(req.statusText));
            }
        };
        req.onerror = function() {
            reject(Error("Сетевая ошибка"));
        };
        req.send();
    });
}

get('cityList.json').then(function(response) {
    "use strict";
    let findName = 'Hurzuf',
        idx = response.findIndex(obj => Object.is(obj.name, findName));

    alert(idx);
}, function(error) {
    console.error("Не удалось выполнить!", error);
});

destus 07.06.2016 09:15

Цитата:

Сообщение от Blondinka (Сообщение 418648)
Не спрашивала про fetch(), потому что не получилось с ним, вообще, ничего распарсить (из того же .json-файла), с promise чуть лучше.

Странно, что не получилось. С подключенной библиотекой co, код выглядит намного красивее и меньше. Просто сравни :)

<!-- в html подключаем библиотеку co -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/co/4.1.0/index.min.js"></script>

/* здесь JS код */
co(function* (){
    let responseFetch = yield fetch("cityList.json");

    let response = yield responseFetch.json();

    let findName = 'Hurzuf',
        idx = response.findIndex(obj => Object.is(obj.name, findName));

    alert(idx);
}).catch(err => alert(err));

destus 07.06.2016 09:37

Цитата:

Сообщение от Rise (Сообщение 418694)
А что это за библиотека?

https://github.com/tj/co
https://learn.javascript.ru/generator#библиотека-co

Blondinka 07.06.2016 13:01

destus,
огромное спасибо :thanks: Буду разбираться дальше.

Blondinka 10.06.2016 22:08

fetch() работает с кроссдоменными запросами?

destus 10.06.2016 22:27

Тут все написано https://habrahabr.ru/post/252941/

Blondinka 10.06.2016 22:55

destus,
спасибо.


Часовой пояс GMT +3, время: 04:48.