使用 StackOverflow API 检索 JSON

发布于 2024-10-10 01:09:18 字数 883 浏览 6 评论 0原文

我想使用 API 从我的 Stack Overflow 配置文件中以 JSON 形式检索信息。

所以我使用此链接 http:/api.stackoverflow.com/1.0/users/401025 /

但是当我发出请求时,我得到一个包含 JSON 数据的文件。 如何使用 Ajax 处理该文件?

这是我的代码(http://jsfiddle.net/hJhfU/2/):

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

   getReputation();

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

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

警报是从未触发,并且 req.responseText 似乎是空的。有什么想法吗?

I want to retrieve information from my Stack Overflow profile as JSON using the API.

So I use this link http:/api.stackoverflow.com/1.0/users/401025/.

But when I make the request I get a file containing the JSON data.
How do I deal with that file using Ajax?

Here is my code (http://jsfiddle.net/hJhfU/2/):

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

   getReputation();

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

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

The alert is never fired and req.responseText seems to be empty. Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

淡看悲欢离合 2024-10-17 01:09:18

注意:您不能使用 Ajax 访问其他域。 (这称为同域策略。)< /strong>

但是,StackOverflow API 支持 JSONP 回调,因此这里有一个解决方案:

通过

创建一个仅执行以下操作的函数那:

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.stackoverflow.com/1.0/users/401025/?jsonp=soResponse');

Note: You cannot use Ajax to access another domain. (This is called the same-domain policy.)

However, the StackOverflow API supports JSONP callbacks, so here is a solution:

Load in the script via a <script> tag.

Create a function that does just that:

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
}

Set up the callback function:

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

Load it!

load_script('http://api.stackoverflow.com/1.0/users/401025/?jsonp=soResponse');
画骨成沙 2024-10-17 01:09:18

对于任何未来的读者:

我想在不使用 oAuth 和整个库的情况下获得我的声誉。感谢 Sebastien Horin 的回答,我可以轻松使用以下内容:

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 v2.3。

For any future readers:

I wanted to get my Reputation without using oAuth and a whole library to do so. Thanks to Sebastien Horin's answer I easily could using the following:

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();

Note: this uses API v2.3.

不疑不惑不回忆 2024-10-17 01:09:18

有一个新的API(替换USER_ID)

https://api.stackexchange.com/2.2/users/[USER_ID]?&site=stackoverflow

there is a new API ( replace USER_ID )

https://api.stackexchange.com/2.2/users/[USER_ID]?&site=stackoverflow
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文