Получить JSON с помощью API Stackru

Я хочу получить информацию из моего профиля переполнения стека в виде JSON с помощью API.

Поэтому я использую эту ссылку Lost in OWL.

Но когда я делаю запрос, я получаю файл, содержащий данные JSON. Как мне работать с этим файлом с помощью Ajax?

Вот мой код ( http://jsfiddle.net/hJhfU/2/):

<html>
 <head>
  <script>
   var req;

   getReputation();

   function getReputation(){
      req = new XMLHttpRequest();
      req.open('GET', 'http://api.stackru.com/1.0/users/401025/');
      req.onreadystatechange = processUser;
      req.send();
   }

   function processUser(){       
       var res = JSON.parse(req.responseText);
       alert('test');      
   }
  </script>
 </head>

Предупреждение никогда не срабатывает и req.responseText кажется пустым. Есть идеи?

3 ответа

Решение

Примечание. Вы не можете использовать Ajax для доступа к другому домену. (Это называется политикой того же домена.)

Однако API-интерфейс Stackru поддерживает обратные вызовы JSONP, поэтому есть решение:

Загрузите скрипт через <script> тег.

Создайте функцию, которая делает именно это:

function load_script(src) {
   var scrip = document.createElement('script');
   scrip.src = src;
   document.getElementsByTagName('head')[0].appendChild(scrip);
   return scrip; //just for the heck of it
}

Настройте функцию обратного вызова:

function soResponse(obj) {
   alert(obj.users[0].reputation);
}

Загрузите это!

load_script('http://api.stackru.com/1.0/users/401025/?jsonp=soResponse');

Для будущих читателей:

Я хотел получить свою репутацию, не используя для этого oAuth и целую библиотеку. Благодаря ответу Себастьяна Хорина я легко мог использовать следующее:

      function get_reputation() {
    const xhttp = new XMLHttpRequest();
    const url = 'https://api.stackexchange.com/2.3/users/USER_ID?&site=stackoverflow';

    xhttp.open( "GET", url );
    xhttp.send();

    xhttp.onreadystatechange = function() {

        if(xhttp.readyState == 4 && xhttp.status == 200) {
            
            var json = JSON.parse(xhttp.responseText);
            
            console.debug( json );
            
        }       
    }
}

get_reputation();

Примечание: здесь используется API версии 2.3.

Есть новый API (заменить USER_ID)

https://api.stackexchange.com/2.2/users/[USER_ID]?&site=stackru
Другие вопросы по тегам