Jquery getJSON Uncaught SyntaxError: Token inesperado: error

Estoy tratando de conectarme a la API de RubyGems , pero cuando trato de obtener el JSON me sale un error increíble.

Uncaught SyntaxError: Unexpected token : 

He visto este error en otras preguntas y publicaciones, pero ninguna de ellas funcionó para mí.

Aquí está mi función $ .getJSON ()

 .getJSON("http://rubygems.org/api/v1/gems/rails.json?jsoncallback=?", function(data) { ...function stuff.... }); 

Este es el JSON que debería recibir:

 {"dependencies":{"runtime":[{"name":"actionmailer","requirements":"= 3.0.9"},{"name":"actionpack","requirements":"= 3.0.9"},{"name":"activerecord","requirements":"= 3.0.9"},{"name":"activeresource","requirements":"= 3.0.9"},{"name":"activesupport","requirements":"= 3.0.9"},{"name":"bundler","requirements":"~> 1.0"},{"name":"railties","requirements":"= 3.0.9"}],"development":[]},"name":"rails","downloads":4474748,"info":"Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration.","version_downloads":93309,"version":"3.0.9","homepage_uri":"http://www.rubyonrails.org","bug_tracker_uri":"http://rails.lighthouseapp.com/projects/8994-ruby-on-rails","source_code_uri":"http://github.com/rails/rails","gem_uri":"http://rubygems.org/gems/rails-3.0.9.gem","project_uri":"http://rubygems.org/gems/rails","authors":"David Heinemeier Hansson","mailing_list_uri":"http://groups.google.com/group/rubyonrails-talk","documentation_uri":"http://api.rubyonrails.org","wiki_uri":"http://wiki.rubyonrails.org"} 

¿Puede alguien ayudarme por favor 🙂

¿Qué te hace pensar que rubygems.org es compatible con JSONP? No veo ninguna mención de JSONP en la documentación y cuando hago esto:

 lynx -dump -source 'http://rubygems.org/api/v1/gems/rails.json?jsoncallback=x' 

Tengo el mismo JSON antiguo que el de

 lynx -dump -source 'http://rubygems.org/api/v1/gems/rails.json' 

La única diferencia entre los dos es que las downloads y las version_downloads downloads cambian, pero eso es lo que se espera.

Cuando usas jsoncallback=? en la cadena de consulta, jQuery configurará una función de callback y asumirá que la URL remota enviará JavaScript (¡no JSON!) que llamará a la función especificada. Por lo tanto, si el servicio remoto devuelve JSON cuando está esperando JavaScript, el navegador terminará intentando interpretar el JSON como JavaScript y se enojará porque

 {"dependencies":{"runtime":[{"name":"action ... 

no es una statement de JavaScript válida. Esto suena exactamente como el error que estás viendo.

Creo que vas a tener que proxy JSON a través de tu propio servidor. Necesitará un controlador en su servidor que haga la llamada para obtener el JSON y luego simplemente lo devuelva a su JavaScript, esto le ayudará a evitar la falta de soporte de JSONP y su problema de dominio cruzado en su cliente.

El navegador está interpretando las llaves como un bloque. La API debe devolver una llamada a la función con los datos JSON como argumento (usando el nombre de callback proporcionado). No parece que esta API sea compatible con JSONP y el parámetro de callback, por lo que deberá contactarlos para solicitar este soporte.

Debería devolver algo como:

 jsonp1279196981233({ ... }) 

en lugar de simplemente

 { ... } 

Porque el cliente lo evaluará como un script. En JavaScript, un conjunto de llaves independientes indicará un bloque.

Dado que está pasando una función de manejador de datos a getJSON() , ¿está seguro de que desea el parámetro de callback JSONP? Intenta eliminar ?jsoncallback=? de la URL:

 .getJSON("http://rubygems.org/api/v1/gems/rails.json", function(data) { ...function stuff.... }); 

Relacionado … Si no devuelve JSON válido, verá este error, aparte de JSONP.

Para mi estaba

 format.json { render :json => ActiveSupport::JSON.encode({:foo => true}) :status => :ok } => { 'foo': true } 

Cuando debí haber sido

 format.json { render :json => ActiveSupport::JSON.encode([{:foo => true}]) :status => :ok } => [ { 'foo': true } ]