2009-05-22 23 views
8

Google cung cấp giao diện REST tuyệt vời để mã hóa địa lý và mã hóa địa lý đảo ngược địa chỉ. Khóa API của tôi là hợp lệ và nếu tôi nhập yêu cầu trực tiếp vào địa chỉ trình duyệt, nó hoạt động tốt. Tuy nhiên, jquery sau thất bại khủng khiếp và tôi không thấy lý do tại sao. Hy vọng bạn có thể giúp tôi ở đây.sử dụng jquery.getJson với Dịch vụ HTTP GeoCoding của Google

$.getJSON("http://maps.google.com/maps/geo?q="+ address+"&key="+apiKey+"&sensor=false&output=json", 
    function(data, textStatus){ 
    console.log(data); 
    }); 

REST của giao diện doc của Google cho dịch vụ này: http://code.google.com/apis/maps/documentation/geocoding/index.html

Trả lời

18

Vấn đề ở đây là tôi đã không được quy định cụ thể gọi lại JSONP. Mã đúng là như sau

$.getJSON("http://maps.google.com/maps/geo?q="+ address+"&key="+apiKey+"&sensor=false&output=json&callback=?", 
    function(data, textStatus){ 
    console.log(data); 
    }); 
+3

Nó hoạt động vì bạn chỉ định chính mình tham số 'callback' ở cuối truy vấn nhưng nếu bạn để jQuery xử lý nó (bằng cách chỉ định 'dataType: 'jsonp'') nó sẽ không, vui lòng xem: http://blog.mikecouturier.com/2011/03/fix-jquery-jsonp-request-to-google-maps.html –

3

Do hạn chế bảo mật, bạn không thể gửi một yêu cầu AJAX đến một URL từ một trang trong một tên miền khác. Đó là lý do tại sao nó hoạt động nếu bạn nhập URL trong trình duyệt, nhưng không phải nếu bạn cố gắng thực hiện yêu cầu từ mã javascript của mình.

Cách giải quyết phổ biến là sử dụng server side component acting as a proxy: nó nhận được yêu cầu AJAX của bạn và gửi chúng đến trình định vị địa lý của google.

+1

Theo trang web của JQuery, $ .getJSON có hỗ trợ gốc cho yêu cầu JSONP. Do đó, không cần nói Proxy – Scott

+2

Không có vấn đề gì miễn là URL từ xa mà bạn đang gọi hỗ trợ JSONP. Google đã tắt JSONP cho V3 của API GeoCoding được đề cập ở trên. –

+0

JSONP là một tác phẩm xung quanh bảo mật XSS được tích hợp trong trình duyệt, điều này thực sự bắt đầu như một lỗ hổng bảo mật nhưng hiện được sử dụng rộng rãi đến mức tôi không thấy chúng sửa chữa nó. –

0

thêm một hàm lỗi

  error: function(xhr, ajaxOptions, thrownError) { 
      alert("Ajax Error: " + xhr.status + "\nMsg: " + xhr.responseText); 
     } 

và cố gắng để gỡ lỗi nếu nó chỉ là một lỗi liên quan json

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