Получить 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