JQuery не получит JSON? - PullRequest
       18

JQuery не получит JSON?

10 голосов
/ 12 марта 2011

Итак, я пытаюсь выполнить простую задачу получения данных json из Google, но этот небольшой кусочек кода jquery не запустится. Не могли бы вы помочь мне выяснить, почему?

  <script src="http://code.jquery.com/jquery-latest.js"></script>

  <script>
  $(document).ready(function(){
    $.getJSON("http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false", function(jsondata) {
            alert(jsondata.status);
    });
  });
  </script>

Лучшее решение: добавить "& callback =?" до конца URL. Большое спасибо за вашу помощь, ребята!

Ответы [ 5 ]

12 голосов
/ 12 марта 2011

Да, это абсолютно одинаковая ошибка в политике происхождения.

Похоже, что последняя версия API Карт Google (v3) не поддерживает jsonp . В результате, если вы хотите геокодировать, вам нужно будет использовать карты API:

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

<script>
    $(document).ready(function(){
        var loc = "1600 Amphitheatre Parkway, Mountain View, CA";
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( {'address': loc },
            function(data, status) { console.log(data); });
    });
</script>

Другие альтернативы:

  • Используйте службу прокси, , как указал ctcherry , чтобы получить данные для вас.
  • Используйте старый V2 API с JSONP, но вам понадобится ключ API Карт.
5 голосов
/ 12 марта 2011

Это называется Одинаковая политика происхождения . Вкратце: домен, на котором находится ваш код, является единственным доменом, с которым может общаться javascript (по умолчанию)

Вы получаете ошибку, подобную этой:

XMLHttpRequest cannot load http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false. Origin http://fiddle.jshell.net is not allowed by Access-Control-Allow-Origin.
4 голосов
/ 12 марта 2011

Попробуйте добавить & callback =?на вашу строку URL.Это может работать.

Подробнее см.> Ошибка XmlHttpRequest: нулевой источник не разрешен Access-Control-Allow-Origin

1 голос
/ 23 июля 2012

У меня была такая же проблема. Попытка получить JSON с сервера, к которому у меня нет доступа (=> нет JSONP).

Я нашел http://benalman.com/projects/php-simple-proxy/ Добавьте php-прокси на свой сервер и выполните ajax-вызов этого файла.

$.ajax({
   type: 'GET',
   url:'proxy.php?url=http://anyDomain.com?someid=thispage',
   dataType: "json",
   success: function(data){
      // success_fn(data);
   },
   error: function(jqXHR, textStatus, errorThrown) {
      // error_fn(jqXHR, textStatus, errorThrown);
   }
});

, где proxy.php (файл от Бена Алмана) находится в вашем домене


Альтернатива (которую я нашел вторым лучшим в этом отношении): http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/

0 голосов
/ 12 марта 2011

Убедитесь, что это не междоменная проблема.Я предполагаю, что для того, чтобы jQuery мог вызывать URL других доменов, вам нужно указать URL в каком-то специальном формате.Я точно не помню, но может быть "?"(вопросительный знак) добавляется в конце URL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...