jQuery: использование $.getJSON для получения локализации из aprs.fi

#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. Тогда ваш единственный вариант — создать серверный скрипт, который работает как прокси.