2011-03-14 19 views
5

Estoy haciendo una página html destinada a ejecutarse localmente en una PC, preferiblemente sin un servidor local runing (file: //). También estoy usando jQuery para hacer que la manipulación/AJAX sea un poco más fácil.Acceso al servicio JSON desde localhost o archivo: //

Estoy tratando de cargar 2 resultados de la API de Twitter, pero me sale un error. El código es el siguiente:

$.getJSON("http://api.twitter.com/1/statuses/user_timeline.json?screen_name=someuser&count=9", {}, 
    function (data) { 
     $.each(data.items, doSomething1); 
    }); 
$.getJSON("http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9", {}, 
    function (data) { 
     $.each(data.items, doSomething2); 
    }); 

También probé el siguiente código, pero no cambió el resultado.

$.getJSON("http://api.twitter.com/1/statuses/user_timeline.json", 
    { 
     count:   "9", 
     screen_name: "someuser" 
    }, 
    function(data) { 
     $.each(data.items, updateAWTweets); 
    }); 
$.getJSON("http://search.twitter.com/search.json", 
    { 
     q:    "somequery", 
     result_type: "recent", 
     count:   "9" 
    }, 
    function(data) { 
     $.each(data.items, updateHashTagTweets); 
    }); 

me sale el siguiente error en cromo (en un servidor localhost):

XMLHttpRequest cannot load http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9. Origin http://localhost:62153 is not allowed by Access-Control-Allow-Origin. 

o (con un file: // enlace)

XMLHttpRequest cannot load http://api.twitter.com/1/statuses/user_timeline.json?screen_name=someuser&count=9. Origin null is not allowed by Access-Control-Allow-Origin. 

¿Alguien sabe cómo me puede arreglar esto?

+0

Ese error es una advertencia de secuencias de comandos entre sitios. –

+0

posible duplicado de [jQuery.getJSON no funciona para twitter] (http://stackoverflow.com/questions/5183831/jquery-getjson-not-working-for-twitter) – epascarello

Respuesta

11

Se está ejecutando en la restricción same-origin policy - su secuencia de comandos no puede acceder a ningún otro dominio además de la que se cargó.

  1. Usted podría dar JSONP una oportunidad - que es una solución común para la obtención de datos a través de dominios:

    Su código sería algo como esto (nota la adición de callback=? a la URL):

    $.getJSON("http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9&callback=?", 
          {}, 
          function (data) { 
            $.each(data.items, doSomething2); 
        }); 
    
  2. Otra opción es configurar un proxy: puede utilizar Apache httpd como un proxy/proxy inverso para evitar esta restricción.

+0

Parece razonable pero ahora me aparece un error diferente: " Unkeught TypeError: no se puede leer la propiedad 'length' undefined " – dtech

+0

Parece que estás intentando acceder a la propiedad' length' en lo que crees que es una matriz, pero en realidad está 'undefined'. Asegúrese de que sus datos realmente existan ('if (! SupposedArray) {// maneje los datos faltantes} else {// haga el procesamiento habitual}'. ¿Qué devuelve Twitter cuando no hay resultados para una consulta de búsqueda? También, eche un vistazo a http://stackoverflow.com/questions/3040069/uncaught-typeerror-cannot-read-property-length-of-undefined-jquery para obtener algunas sugerencias sobre cómo depurar esta (y otras) excepciones. –

+1

Aquí hay un [violín básico] (http://jsfiddle.net/nogoodatcoding/reJN6/4/) que obtiene tweets para un usuario en particular y también muestra los resultados de una búsqueda. ¿Es eso de alguna ayuda? –

-2

no utilice este $.getJSON() Su no es flexible .. Puede utilizar

$.ajax({ 
    url:"test.json", 
    dataTypr:"json", 
    async:false 
}).responseText; 

esto puede fácilmente accesible en el html codificación ...

Cuestiones relacionadas