JSONP调用本地Web服务

时间:2013-11-12 22:59:16

标签: javascript ajax sinatra jsonp

我在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端口之前的冒号。有谁知道我怎么能让它发挥作用?

1 个答案:

答案 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逐字逐句。

祝你好运!