我在localhost:4567上运行了一个简单的sinatra webservice。该服务返回一些JSON,如下图所示......
require 'rubygems';
require 'sinatra';
require 'json';
get '/example' do
content_type :json
{ :key1 => 'value1', :key2 => 'value2' }.to_json
end
我可以打开浏览器并请求“http:// localhost:4567 / example”并获取json数据“{”key1“:”value1“,”key2“:”value2“}”。
我需要用这样的代码做一个简单的ajax请求......
jQuery.getJSON("http://localhost:4567/example",
function (data) {
alert(data);
});
但是我遇到了Access-Control-Allow-Origin问题。我想像这样使用JSONP ......
jQuery.getJSON("http://localhost:4567/example/?callback=?",
function (data) {
alert(data);
});
但继续押注错误“Uncaught SyntaxError:Unexpected token:”。我相信这是我的localhost端口之前的冒号。有谁知道我怎么能让它发挥作用?
答案 0 :(得分:1)
除非请求是使用相同的URL(包括端口),否则您将遇到此问题。
对于JSONP,您需要像这样设置Sinatra路线:
get '/example' do
callback = params[:callback]
json = { :key1 => 'value1', :key2 => 'value2' }.to_json
if callback
content_type :js
response = "#{callback}(#{json})"
else
content_type :json
response = json
end
response
end
在进行JSONP调用时,我个人更喜欢ajax调用的详细信息:
$.ajax({
url: 'http://localhost:4567/example',
dataType: 'jsonp',
success: function(res) {
console.log(res);
}
});
以上示例几乎是this snippet逐字逐句。
祝你好运!