8 Stimmen

Abrufen von JSON mit der StackOverflow-API

Ich möchte über die API Informationen aus meinem Stack Overflow-Profil als JSON abrufen.

Ich verwende also diesen Link http:/api.stackoverflow.com/1.0/users/401025/ .

Aber wenn ich die Anfrage stelle, erhalte ich eine Datei, die die JSON-Daten enthält. Wie gehe ich mit dieser Datei mit Ajax um?

Hier ist mein 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>

Der Alarm wird nie ausgelöst und req.responseText scheint leer zu sein. Irgendwelche Ideen?

10voto

Jacob Relkin Punkte 156445

Note : Sie können Ajax nicht verwenden, um auf eine andere Domäne zuzugreifen. (Dies wird als die Domänenübergreifende Politik .)

Da die StackOverflow-API jedoch JSONP-Callbacks unterstützt, gibt es hier eine Lösung:

Laden Sie das Skript über eine <script> Tag.

Erstellen Sie eine Funktion, die genau das tut:

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
}

Richten Sie die Rückruffunktion ein:

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

Laden Sie es!

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

1voto

Odilio Witteveen Punkte 105

Für alle zukünftigen Leser:

Ich wollte meinen Ruf erhalten, ohne oAuth und eine ganze Bibliothek dafür zu verwenden. Dank der Antwort von Sébastien Horin konnte ich einfach das Folgende verwenden:

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

Hinweis : Dies verwendet API v2.3.

0voto

Sebastien Horin Punkte 9939

Es gibt eine neue API ( USER_ID ersetzen )

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X