Я подозреваю, что проблема в том, что вы пытаетесь обработать объект"m", как если бы это был массив . Объявите это так:
var m = [];
и посмотри, что получится. На простых объектах нет функции «push», поэтому после добавления вашего первого маркера строка вызывает исключение.
Консоль ошибок Javascript, как бы она ни отображалась в используемом вами браузере, должна всегда быть открытой, пока вы пытаетесь создать новый код. Ну, может быть, не всегда , но, конечно, в ту минуту, когда происходит что-то странное.
изменить & mdash; Вызов функции .push()
в вашем коде в порядке; проблема заключалась в том, что вы пытались вызвать его из чего-то, что не было массивом. Все, что делает функция, это расширяет массив заданным элементом. Массивы Javascript несколько странны, и основная магия связана с тем, как среда выполнения поддерживает значение атрибута "length". Вы можете более непосредственно расширить массив следующим образом:
arr[arr.length] = newValue;
Вы также можете просто использовать некоторый числовой индекс, вычисленный некоторым образом:
arr[pick_a_number()] = newValue;
Когда вы это делаете, среда выполнения проверяет, правильно ли обновлен атрибут "length", если число, используемое в качестве индекса, будет больше текущего значения.
Теперь вернемся к обновленному коду. Теперь это работает, потому что вы добавляете точки на карту подряд и не вызываете никаких исключений. Тем не менее, написав:
m = google.whatever( ... );
вы больше не добавляете эти точки в массив - вы переназначаете переменную "m" на одну из точек, снова и снова. Измените его на «push» и & mdash; если вы также измените объявление "m", как я предложил & mdash; он все равно будет работать, и ваш массив будет заполнен правильно.