Uncaught TypeError: Свойство… не является функцией - после загрузки страницы

Я использую междоменный запрос 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?

Спасибо за совет.

6
задан Nick Craver 1 July 2011 в 14:22
поделиться