Клуб API Карт

Ошибка: server responded 400

rockerror
27 января 2011, 21:12

Собрал сайтик hookahbar.ru, если честно с yandex.api по-хорошему впервые столкнулся, и, возможно, проблема уже обсуждалась, но поискав ничего похожего не нашел((

Суть в том, что сам скрипт работает, т.е. карта отображается, объекты на нее все размещаются, вобщем, работает все правильно, вот только при загрузке страницы с картой выскакивает ошибка: server responded 400. Может кто подскажет в чем косяк? Наверняка решение до банальности просто.

Заранее спасибо.

7 комментариев
Подписаться на комментарии к посту
Уберите
alert('Ошибка: ' + error); 

из кода. Сообщение появляться не будет
Спасибо огромное, помогло. А в чем ошибка заключается, если не секрет? Ато, как я понял, мы в даннос случае симптом побороли, а не заболевание.Или я ошибаюсь?
Это, как я понимаю, был вывод статус кода загрузки. В тестовом примере просто показывало, что карта нормально загрузилась. Но это предположение, я больше в google maps api разбираюсь
Геокодировать каждый раз излишне (из-за этого метки на карте появляются не сразу и страница в целом загружается медленнее).

Я вам посоветую немного другое решение: вынести весь html-код в шаблон, метки создавать с помощью функции, а координаты точек узнать с помощью инструмента Определение координат (для небольшого количества точек - этот инструмент подходит как никуда лучше).

В итоге код у нас сократится и будет иметь примерно следующий вид:

YMaps.jQuery(function () {
    var map = new YMaps.Map(YMaps.jQuery("#YMapsID"));
    map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);
    map.addControl(new YMaps.Zoom());    map.addControl(new YMaps.ScaleLine());                                                                                                                                        

    YMaps.Styles.add("my#balloon", {
        balloonContentStyle : {
            template : new YMaps.Template(
                '

$[metaDataProperty.name]

' +
                '

$[metaDataProperty.address]

' +·
                '

 $[metaDataProperty.phone]

'
            )        }
    });

    function createPlacemark (point, content) {
        var placemark = new YMaps.Placemark(point, { style : "my#balloon" });
        placemark.metaDataProperty = YMaps.jQuery.extend({}, content);
        return placemark;
    };

    map.addOverlay(createPlacemark(new YMaps.GeoPoint(37.664455,55.724743), {
        name : "Ресторан чайхана «ПАХЛАВА»",
        address : "Москва, ул. Симоновский вал д. 11/31",
        phone : "(495) 674-42-93"
    }));

    map.addOverlay(createPlacemark(new YMaps.GeoPoint(37.658958,55.757222), {
        name : "«Каро Фильм», ТЦ «Атриум»",
        address : "Москва, ул. земляной вал д.33",
        phone : "(495) 970-17-80"
    }));
});

Я добавли только два ваших объекта, но по аналогии вы сможете добавить любые другие.

Использование такого решения вам даст несколько преимуществ:
1. Метки отображаются по координатам (а не геокодируются каждый раз), соответственно карта грузится быстрее + вам не нужно бояться, что вы привысите лимит в 25000 запросов в сутки.
2. Весь контент, который у вас отображается в балуне, вынесен в единый шаблон. Вам нужно менять оформление контента только в одном месте.
3. Кода меньше :)

И по традиции даю ссылки на документацию, где можно поподробнее про это почитать:
http://api.yandex.ru/maps/jsapi/doc/dg/tasks/how-to-add-placemark.xml - метки
http://api.yandex.ru/maps/jsapi/doc/dg/concepts/overlay_appearance.xml - стили, шаблоны

Если возникнут вопросы - смело спрашивайте.
О!)) Отлично)) Спасибо огромное, займусь на досуге)) Надо ща придумать как сие с пхп скрестить по-грамотнее)) Ато у меня там просто массив с адресами циклом перебирается и собсно в цикл apiшный код встроен, который на карту сие безобразие выводит... Ща на досуге покурю и оптимизирую))))
На самом деле вам один раз сгеокодировать ваш список адресов и потом выводить уже просто по координатам. Ну или вручную определить координаты с помощью инструмента, как я уже писал в прошлом комментарии.
Спасибо огромное. Отает исчерпывающий!)) Кстати, сначала, когда писал, именно так и хотел сделать, но эту статью не нашел (а трудность была именно в геокодировании) и реализовал "как смог")) Благодаря вам вернусь к изначальному плану)) :-)