2010-05-27 40 views
41

Tôi đang cố gắng thực hiện cuộc gọi jQuery $.getJSON tới số Google Maps Geocoding webservice, nhưng điều này không hoạt động do các vấn đề bảo mật tên miền chéo.Làm cách nào để thực hiện cuộc gọi AJAX giữa nhiều miền với API Google Maps?

tôi đã không thể tìm ra trên mạng, nhưng tôi đã đọc một chút thông tin về Google API Javascript hoặc JSONP, nhưng cho đến nay không có câu trả lời rõ ràng ...

thể ai Enlight tôi?

Cảm ơn!

Trả lời

86

Tôi không thấy lợi thế khi sử dụng Server-side Geocoding Web Service khi Google Maps cung cấp đầy đủ tính năng Client-side Geocoding API cho JavaScript.

Trước hết, điều này sẽ tự động giải quyết vấn đề cùng nguồn gốc của bạn và ngoài ra giới hạn yêu cầu sẽ được tính cho mỗi địa chỉ IP của khách hàng thay vì mỗi địa chỉ IP của máy chủ, điều này có thể tạo sự khác biệt lớn cho một trang web phổ biến.

Dưới đây là một ví dụ rất đơn giản bằng cách sử dụng JavaScript Geocoding API v3:

<script src="http://maps.google.com/maps/api/js?sensor=false"></script> 

<script type="text/javascript">  
    var geocoder = new google.maps.Geocoder(); 
    var address = 'London, UK'; 

    if (geocoder) { 
     geocoder.geocode({ 'address': address }, function (results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      console.log(results[0].geometry.location); 
     } 
     else { 
      console.log("Geocoding failed: " + status); 
     } 
     }); 
    }  
</script> 

Nếu vì một số lý do bạn vẫn muốn sử dụng các dịch vụ web server-side, bạn có thể thiết lập một rất đơn giản reverse proxy, có lẽ sử dụng mod_proxy nếu bạn đang sử dụng Apache. Điều này sẽ cho phép bạn sử dụng đường dẫn tương đối cho các yêu cầu AJAX của bạn, trong khi máy chủ HTTP sẽ hoạt động như một proxy cho bất kỳ vị trí "từ xa" nào.

Chỉ thị cấu hình cơ bản để thiết lập proxy ngược trong mod_proxy là ProxyPass. Bạn thường sẽ sử dụng nó như sau:

ProxyPass  /geocode/  http://maps.google.com/maps/api/geocode/ 

Trong trường hợp này, trình duyệt có thể làm cho một yêu cầu để /geocode/output?parameters nhưng máy chủ sẽ phục vụ này bằng cách đóng vai trò như một proxy để http://maps.google.com/maps/api/geocode/output?parameters.

+0

Cảm ơn, tôi không biết về sự tồn tại của một lớp học như vậy. Nó giải quyết vấn đề của tôi :) –

+0

@Daniel Vassallo, bạn có nhận thấy sự khác biệt trong việc sử dụng API so với http://maps.google.com/maps/place không? Tôi nhận được kết quả tốt hơn khi sử dụng URL đó. Bạn có thêm thông tin về phần này không? Ví dụ: Google có thể xác định vị trí này: http://bit.ly/9wxOL2 NHƯNG Tôi đã cố gắng định vị cùng một vị trí bằng API trong vài ngày mà không thành công. – wenbert

+0

@wenbert: Có, tôi đã nhận thấy rằng trong một vài trường hợp. Tôi thậm chí còn tìm thấy một số hình ảnh bản đồ (cả bản đồ vệ tinh và bản đồ đường) hơi khác với maps.google.com và API Maps. Ví dụ: tôi đã tìm thấy một dịp mà đường biên của toàn bộ một hòn đảo được bù đắp khoảng 100m về phía Bắc khi so sánh hình ảnh của maps.google.com và API Maps. –

Các vấn đề liên quan