Tôi đang sử dụng yêu cầu Ajax tên miền chéo cho API bên ngoài. Thường thì không thành công, với thông báo trên bảng điều khiển:Loại không bắt buộcLỗi: Thuộc tính ... không phải là chức năng - sau khi trang đã tải
Uncaught TypeError: Property 'photos' of object [object DOMWindow] is not a function
Nhìn vào JSON được trả về, nó là JSON hợp lệ, do đó, nó không phải là lỗi của API bên ngoài.
Tôi không thể tạo lại lỗi một cách đáng tin cậy: yếu tố duy nhất dường như kích hoạt lỗi là khi tôi gọi yêu cầu nhanh chóng và liên tục.
Trong trường hợp này, tôi gọi yêu cầu Ajax khi người dùng di chuyển bản đồ Google (để thêm điểm đánh dấu vào bản đồ) và điều đó xảy ra nếu người dùng di chuyển quá nhanh.
Dưới đây là những phần liên quan của mã của tôi:
// 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);
});
Sau khi google một chút, lỗi Uncaught TypeError: Property 'photos' of object [object DOMWindow] is not a function
nói chung dường như xảy ra khi jQuery chưa được nạp. Tuy nhiên, tôi không thấy rằng điều này có liên quan ở đây, bởi vì chức năng này được gọi từ sự kiện xếp chồng của bản đồ - và nó thường không kích hoạt lần đầu tiên, nó có xu hướng cháy sau năm hoặc sáu bản đồ thay đổi kích thước nhanh chóng . Vì vậy, nếu nó hoạt động một lần, trang chắc chắn không thể có 'lãng quên' về jQuery?
Cảm ơn lời khuyên của bạn.
Thử xóa dòng 'jsonpCallback:' photos ', 'và xem nó có hoạt động hay không. Tốt hơn là để jQuery xử lý những thứ đó. Trong khi bạn đang ở đó, bạn có thực sự cần tham số 'contentType' được đặt như thế không? Đó là để gửi dữ liệu, không nhận dữ liệu ... – davin
nó chỉ có nghĩa là ảnh không phải là chức năng/phương pháp do đó bạn không cung cấp gọi lại, vì vậy ở đâu đó bạn nên có 'ảnh chức năng() {...}' – Val