Объект JSON имеет значение null, хотя фид является допустимым JSON - PullRequest
0 голосов
/ 06 сентября 2010

Помогите, я в замешательстве.
Мне просто нужно вставить объект JSON на мою страницу.URL-адрес выглядит следующим образом:

http://disqus.com/api/get_forum_posts/?user_api_key=MYKEY&forum_id=MYID&api_version=1.1

Если я использую URL-адрес Flickr API и код, указанный в примере getJSON , он работает нормально:

<script>$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
        function(data){
          alert(data);
          $.each(data.items, function(i,item){
            $("<img/>").attr("src", item.media.m).appendTo("#images");
            if ( i == 3 ) return false;
          });
        });</script>

Но, если я подставлю указанную выше ссылку на Disqus, данные будут нулевыми.После прочтения JSON Feed, возвращающего значение NULL при использовании jQuery getJSON , я проверил, вернул ли этот URL верный JSON, и это так.

API Disqus , кажется, предполагает, что он поддерживает JSONP - «Вы также можете передать« jsonp: callback »в качестве параметра« api_response_format »».Я пытался добавить этот параметр, но он не помогает.

Что я делаю не так?Я подозреваю, что проблема может заключаться в том, что я не совсем понимаю разницу между JSON и JSONP и что мне нужно сделать, чтобы вернуть JSONP.

Ответы [ 5 ]

2 голосов
/ 06 сентября 2010

Вы можете назвать это так:

$.ajax({
  url: 'http://disqus.com/api/get_forum_posts/?user_api_key=MYKEY&forum_id=MYID&api_version=1.1&api_response_format=jsonp:myFunction',
  dataType:  'jsonp'
});
function myFunction(data) { //make sure this is available globally
  //use data
}

Вы можете попробовать здесь .

Как и ваша ссылка на документацию, параметр в конце api_response_format=jsonp:myFunction является ключом, проверьте ссылку непосредственно здесь , даже если это ошибка из-за ключа, посмотрите, как формат отличается? Это то, что требуется для вызова JSONP, формат ответа functionName({data}).

0 голосов
/ 08 сентября 2010

Кроме того, если ваши даты не заполнены нулями, события не будут отображаться.Ex.2010-9-5 плохо Ex.2010-09-05 хорошо

0 голосов
/ 06 сентября 2010

Предполагается, что аргумент api_response_format=jsonp:callback - это имя функции обратного вызова, определенной вашим Javascript. Допустим, у меня есть функция с именем handleJson, которая должна анализировать ответ JSON, а затем вам нужно передать аргумент jsonp:handleJson. Затем Disqus передаст вам код, завернутый в вызов, на номер handleJson.

Что дает JSONP, так это возможность обойти политику происхождения в одном домене. Предположим, что URL <<code>http://foo/json> отвечает этим объектом JSON:

{
  id: 2,
  first_name: 'John',
  last_name: 'Doe',
}

Единственный способ использовать этот объект, если вы также находитесь в домене foo. Но если вы не можете находиться в этом домене, предположим, что вы получаете доступ к API, который возвращает объекты формата JSON, тогда вам нужна небольшая помощь от этого поставщика API.

Предположим, что запрашиваемый вами URL теперь становится <<code>http://foo/json?callback=handleJson>, а провайдер API отвечает следующим образом:

handleJson({id: 2, first_name: 'John', last_name: 'Doe'})

Теперь браузер попытается запустить этот фрагмент Javascript внутри среды, которую вы определили. Поэтому, если вы определили функцию handleJson, она будет вызвана.

Вот что такое JSONP, способ обойти политику происхождения в одном домене и предоставить вам межсайтовый скриптинг с объектами JSON.

0 голосов
/ 06 сентября 2010

В вызове Disqus отсутствует функция обратного вызова

0 голосов
/ 06 сентября 2010

При копировании двух URL-адресов, предоставленных вами самостоятельно в окно браузера, URL-адрес DISQUS возвращается с ошибкой «Страница загрузки проблемы».

...