Jquery getJSON Uncaught SyntaxError:意外的令牌:错误

rog*_*iog 1 javascript jquery json

我正在尝试连接到RubyGems API,但是当我尝试获取JSON时,我得到了一个stange错误.

Uncaught SyntaxError: Unexpected token :
Run Code Online (Sandbox Code Playgroud)

我在其他问题和帖子中看到过这个错误,但没有一个对我有用.

这是我的$ .getJSON()函数

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

这是我应该收到的JSON:

{"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"}
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗 :)

mu *_*ort 8

是什么让你认为rubygems.org支持JSONP?我在文档中没有看到任何JSONP提及,当我这样做时:

lynx -dump -source 'http://rubygems.org/api/v1/gems/rails.json?jsoncallback=x'
Run Code Online (Sandbox Code Playgroud)

我得到了与我相同的普通旧JSON

lynx -dump -source 'http://rubygems.org/api/v1/gems/rails.json'
Run Code Online (Sandbox Code Playgroud)

两者之间的唯一区别是downloadsversion_downloads变化,但这是预期的.

当您jsoncallback=?在查询字符串中使用时,jQuery将设置一个回调函数,并假设远程URL将发回将调用指定函数的JavaScript(而不是JSON!).因此,如果远程服务在您期待JavaScript时发送回JSON,浏览器将最终尝试将JSON解释为JavaScript并因此而感到不安

{"dependencies":{"runtime":[{"name":"action ...
Run Code Online (Sandbox Code Playgroud)

不是有效的JavaScript语句.这听起来就像你看到的错误.

我想你将不得不通过自己的服务器代理JSON.您需要在服务器上使用一个控制器来调用JSON,然后简单地将其回传给您的JavaScript,这将使您在客户端中缺少JSONP支持和跨域问题.

  • 嘿,伙计,我对所有这些JSON的东西都不是那么好,但我曾经有过Access-Control-Allow-Origin错误,他们告诉我要添加JSONP选项,以解决这个错误,但现在我是坚持这个,问题.你知道如何在不添加JSONP的情况下通过ccess-Control-Allow-Origin错误吗? (2认同)