JQuery не получит json?
Итак, я пытаюсь выполнить простую задачу получения 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-адреса. Большое вам спасибо за вашу помощь!
Ответы
Ответ 1
Его называют Одинаковая политика происхождения. Короче: домен, в котором находится ваш код, является единственным доменом, с которым ваш 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.
Ответ 2
Yup, это абсолютно ошибка с тем же исходным кодом.
Кажется, что последняя версия 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>
Другие альтернативы:
- Используйте услугу "proxy", как указано ctcherry, чтобы получить данные для вас.
- Используйте старый V2 API с JSONP, но вам понадобится ключ API Карт.
Ответ 3
Попробуйте добавить & callback =? к вашей строке URL. Это может сработать.
См. это для деталей > Ошибка XmlHttpRequest: Происхождение null не разрешено Access-Control-Allow-Origin
Ответ 4
У меня была такая же проблема. Попытка получить 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(файл от Ben Alman) размещен в вашем домене
Альтернатива (которая, как мне показалось, лучше всего подходит для этого):
http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/
Ответ 5
Убедитесь, что это не междоменная проблема. Я думаю, для jQuery, чтобы иметь возможность звонить другим URL-адресам домена, вам нужно указать URL-адрес в каком-то специальном формате. Я точно не помню, но, может быть, "?" (вопросительный знак), добавленный в конце URL?