Клуб API Карт

Как получить ошибку при неверном запросе?!

Пост в архиве.

Привет всем!

Как можно получить ошибку при неверном запросе пользователя, тоисть неверное введено адрес или координаты?

  

 ymaps.geocode(coords,{ results: 1,kind: 'locality'}).then(function (res) {

            $res = res.geoObjects.get(0);

            $('#YaMap').text('');

            var map = new ymaps.Map("YaMap", {

                center: $res.geometry.getCoordinates(),

                zoom: 17,

                behaviors: ['default']

            });

            $('#YaMap').append('<div class="alert alert-success bottom">'+$res.properties.get('text')+' ['+$res.geometry.getCoordinates()+']</div>');

            map.geoObjects.add(new ymaps.Placemark($res.geometry.getCoordinates(), {hintContent: hint},{iconImageHref: '/theme/frontend/img/baloon.png',iconImageSize: [27,26],iconImageOffset: [-10,-24]}));

        },function(err){alert(err.errorMessage)})

  

К примеру если юзверь введет "qwe", тогда в консоли получаю ошибку "Uncaught TypeError: Cannot read property 'geometry' of null"


ЗЫ: пробывал также писать так: 

 

var gc = ymaps.geocode(coords,{ results: 1,kind: 'locality'}).then(function (res) {...});

YMaps.Events.observe(gc, gc.Events.Load, function () {
        if (!this.length()) {alert("Ничего не найдено");}
});

 

Тогда начинает матерится на Load.. 

Подскажите пожалуйсто как правильно обработать ошибки

Большое спасибо!

8 комментариев

1) перед манипуляциями с данными стоит проверять res.found > 0
2) геокодер возвращает Promise, в котором можно повесить колбек на обработку ошибок получения данных. 

+ можете посмотреть пример из клубика, как там все сделано http://ymapsapi.ya.ru/replies.xml?item_no=1501

Русенко Игорь
28 января 2016, 01:38

1. res.found возвращает undefined даже при верном запросе

2. Можно поподробнее.. или может Вы имели ввиду then(function (res) {...}, function(err){...}) ?

 

ЗЫ: Пример запутаный чуток, а в JS я не гуру.. Да и хотелось бы понять систему обработки.. а то мануал неосилил...

1) извиняюсь: res.metaData.geocoder.found > 0;
2) да, именно. 1-й аргумент — коллбэк при удачном получении ответа от сервера, 2-й если произошла ошибка.

Русенко Игорь
28 января 2016, 01:38

по п.2 я писал в самом вопросе - ,function(err){alert(err.errorMessage)}

Ошибки не обрабатывались..

в данном случае у вас не ошибка, связанная с сервером, а ошибка в том, что объектов не найдено (ака получено 0 объектов). При этом вы пытаетесь манипулировать отсутствующими данными. Как это лечить я описал выше. 

Для обработки ошибок есть стандартная конструкция в языке — try {} catch (err) {} . 

 

P.S. разработку лучше вести с ключом &mode=debug, тогда при возникновении ошибок, часто будет выводиться более подробное описание. 

Русенко Игорь
28 января 2016, 01:38

Подлечил так как Вы описали.. 

Большое спасибо что разяснили.. 

Обработка ошибок геокодирования продемонстрирована в этом примере

Русенко Игорь
28 января 2016, 01:38

Выше "zloylos" уже дал эту ссылку!

Спасибо