Я использую междоменный запрос Ajax к внешнему API. Время от времени происходит сбой, с консольным сообщением:
Uncaught TypeError: Property 'photos' of object [object DOMWindow] is not a function
Если посмотреть на возвращаемый JSON, это действительный JSON, поэтому это не ошибка внешнего API.
Я не могу достоверно воспроизвести ошибку: единственный фактор, который, кажется, вызывает ошибку, - это когда я вызываю запрос быстро и неоднократно.
В этом случае я вызываю запрос Ajax, когда пользователь перемещает карту Google (для добавления маркеров на карту), и это происходит, если пользователь перемещается слишком быстро.
Вот соответствующие части моего кода:
// Code located inside an external JS file referenced inside the head
// Not wrapped inside document.ready - but all the code setting up
// the map (calling a function which calls a function which adds the
// tilesloaded listener) *is* inside document.ready
function addMarkers() {
var pm_url = "http://www.cyclestreets.net/api/photos.json?key=" + MY_KEY;
$.ajax({
url: pm_url,
crossDomain: true,
contentType: "application/json",
dataType: 'jsonp',
data: pmdata,
jsonpCallback: 'photos',
success: function(data) {
// TBA
},
error: function() {
alert("Sorry, error retrieving photos!");
}
});
}
google.maps.event.addListener(map, 'tilesloaded', function() {
addMarkers(map);
});
Немного погуглив, ошибка Uncaught TypeError: свойство 'photos' объекта [object DOMWindow] не является функцией
обычно возникает, когда jQuery не загружен.
Однако я не вижу, чтобы это уместно здесь, потому что функция вызывается из события тайлов загруженной карты - и обычно она не срабатывает в первый раз, она имеет тенденцию срабатывать после пяти или шести быстрых изменений размера карты. Значит, если это сработает один раз, страница наверняка не могла «забыть» о jQuery?
Спасибо за совет.