2010-12-29 31 views
6

Deseo recuperar información de mi perfil de Desbordamiento de pila como JSON utilizando la API.Recuperar JSON con API de StackOverflow

Así que utilizo este enlace http:/api.stackoverflow.com/1.0/users/401025/.

Pero cuando realizo la solicitud, obtengo un archivo que contiene los datos JSON. ¿Cómo trato con ese archivo usando Ajax?

Aquí está mi código (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> 

La alerta no se dispara y req.responseText parece estar vacío. ¿Algunas ideas?

+7

Use jQuery. Manual AJAX hace que las personas que leen tu código te odien y es probable que cometas errores. – ThiefMaster

+0

@ThiefMaster Te vas a reír cuando veas mi respuesta actualizada. –

Respuesta

8

Nota: No puede usar Ajax para acceder a otro dominio. (Esto se llama el same-domain policy.)

Sin embargo, la API es compatible con las devoluciones de llamada Stackoverflow JSONP, asi que aquí hay una solución:

de carga en la secuencia de comandos a través de una etiqueta <script>.

Crear una función que hace precisamente eso:

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 
} 

configurar la función de devolución de llamada:

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

Carga él!

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

bien, pero cuando ejecuto esto no hace nada, http://jsfiddle.net/hJhfU/2/ –

+0

@ArtWorkAD Antes que nada, Ajax no funciona en jsFiddle. En segundo lugar, vea mi respuesta actualizada. –

+0

Parece que req.responseText está vacío –