2010-06-29 14 views
6

Estoy probando la nueva API gráfica para Facebook. Estoy tratando de obtener algunos datos usando jquery ajax. Esta es una muestra de mi código Javascript, muy básico ...Usando la nueva API de Facebook api, las llamadas ajax devuelven null (vacío)

var mUrl = 'https://graph.facebook.com/19292868552'; 
    $.ajax({ 
     url: mUrl, 
     dataType: 'json', 
     success: function(data, status) { 
      $('#test').html(data); 
      alert(data); 

     }, 
     error: function(data, e1, e2) { 
     $('#hello').html(e1); 
     } 
    }); 

La url es una página que no necesita testigos de acceso (probarlo utilizando un navegador), pero la función de éxito devuelve un objeto vacío o nulo.

¿Qué estoy haciendo mal? Agradecido por toda la ayuda!

+1

¡Exactamente mi pregunta! – digiguru

Respuesta

0

No se pueden hacer solicitudes AJAX entre dominios como esa debido al same-origin policy. En su lugar, use Facebook JavaScript SDK, que se basa en una etiqueta de script.

+0

¡Gracias! Lo intentaré –

+0

No está relacionado con dominios cruzados. Puedo ver los datos json de Facebook usando un analizador de red (wireshark) Este hilo es sobre el problema similar http://stackoverflow.com/questions/2387271/ajax-response-is-gzip-compressed-prototype-firefox- cant-handle-it Quizás esté relacionado con gzip, pero no estoy seguro de eso ... tengo una llamada similar a youtube var url = "http://gdata.youtube.com/feeds/api/videos? q = "+ query +" y max-results = 30 & v = 2 & alt = jsonc & format = 5 "; y funciona a pesar de la misma codificación gzip que facebook call –

+0

bien ...después de una hora de investigación estoy aún más confundido :) si Firefox implementa la política del mismo origen al ocultar responseText, entonces puede ser que (voy a devolverte el 1 punto cuando pasaron 24 horas) –

10

He cubierto esto y he hecho esta pregunta antes. Hice una rápida tutorial que cubre exactamente esto y lo explica todo.

En resumen: JSON no está hecho para el uso de dominios cruzados de acuerdo con su política de origen. Sin embargo, la solución alternativa es usar JSONP, lo que podemos hacer en jQuery utilizando el parámetro de devolución de llamada soportado en la API API de Facebook. Podemos hacerlo añadiendo el parámetro en la URL como

https://graph.facebook.com/19292868552?callback=?

mediante el uso de la devolución de llamada =? jQuery cambia automáticamente el? para envolver el json en una llamada de función que luego permite a jQuery analizar los datos con éxito.

También intente utilizar el método $ .getJSON.

+0

Creo que es importante tener en cuenta que la API de gráficos de Facebook admite JSONP, lo que permite que funcione. –

3

yo estaba tratando de hacer algo similar, en las pruebas de que era capaz de conseguir un buen resultado de trabajo que ahorré en jsFiddle: http://jsfiddle.net/8R7J8/1/

Guión:

var facebookGraphURL = 'https://graph.facebook.com/19292868552'; 
$.ajax({ 
    url: facebookGraphURL, 
    dataType: 'json', 
    success: function(data, status) { 
     $('#output').html('Username: ' + data.username); 
    }, 
    error: function(data, e1, e2) { 
     $('#output').html(e2); 
    } 
}) 

HTML:

<html> 
    <body> 
    <div id="output">BorkBorkBork</div> 
    </body> 
</html> 

Espero que ayude! :)

Cuestiones relacionadas