#javascript #jquery #json #localization #getjson
#javascript #jquery #json #локализация #getjson
Вопрос:
Я хочу использовать JSON для получения координат локализации из http://aprs.fi/page/api . Я нашел пример в http://api.jquery.com/jQuery.getJSON :
<script>
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",
{
tags: "cat",
tagmode: "any",
format: "json"
},
function(data) {
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});
</script>
Когда $.getJSON выполняется успешно, он запускает функцию (данные), она помещает 4 изображения на веб-сайт. Я вставляю этот код в свой HTML-файл, и он работает, поэтому я изменил его, чтобы получать данные JSON из aprs.fi:
<script>
$.getJSON("http://api.aprs.fi/api/get?name=OH7RDAamp;what=locamp;apikey=_key_amp;format=json",
function(data)
{
alert("Anything");
});
};
</script>
Возможно, мой запрос неверен, но даже «Что угодно» не печатается на моем экране. Я понятия не имею, как это изменить, чтобы это работало.
Комментарии:
1. Разве это не должен быть вызов jsonp, поскольку он является междоменным. добавить jsoncallback=? к URL, например api.aprs.fi/api /… ?
2. Сайт, к которому вы пытаетесь получить доступ, должен понимать, как отвечать на запрос JSONP. Я не вижу никаких признаков того, что этот сайт делает это.
Ответ №1:
То, что сервис может возвращать результаты в формате JSON, не означает, что вы можете получить к нему доступ через JSONP. Сайт должен явно распознавать такой запрос, чтобы ответ работал как ответ JSONP. (То есть ответ должен принимать форму вызова функции, при этом возвращаемые данные JSON передаются в качестве аргумента функции.)
Комментарии:
1. Я изменил ma url на < api.aprs.fi/api /… > но это все равно не работает.
Ответ №2:
XHRS, которые использует getJSON, подчиняются политике одного и того же источника в веб-браузерах; вы можете указать XHR только с того же сервера, порта, комбинации протоколов, что и веб-страница, на которой они используются. Если ваша веб-страница работает на http://example.org:5625 он может направлять запросы XHR только на http://example.org:5625/some-path-here .
Обходной путь называется JSONP, где ресурс загружается в виде тега. Однако рассматриваемая служба должна быть осведомлена об этом. Вы можете сказать, так ли это, потому что после добавления параметра обратного вызова он должен показывать что-то вроде
callbackname({"the": "respose", "goes": "here"});
то есть вызов функции для именованного обратного вызова. Однако, если я правильно понял, служба, которую вы используете, не поддерживает JSONP. Тогда ваш единственный вариант — создать серверный скрипт, который работает как прокси.