我知道有几个与此相关的问题--但我找不到我的答案。另外,我想要更多的澄清。
我在本地运行一个rails应用程序,它对作为API使用的sinatra应用程序进行jsonp调用。
当我把这个网址放到我的浏览器中时,我最终得到了正确的响应,但是当我使用$.getJSON通过jQuery进行这个调用时,我得到了一个禁止的403错误。据我所知,$.getJSON正在根据url发出jsonp请求,其中包含callback=?参数。
我正在试图找出是什么导致了403错误。api应用程序上是否有一些默认配置,因为脚本是从包含的script标记中请求的,所以会拒绝该请求?
现在,api请求返回json数据。我认为查看回调参数并构造一个实际调用回调的响应是我的责任……
因此,如果url是http://myapi.com?callback=blah,那么我应该返回如下内容:
废话({foo:'bar'})
但我不知道403到底是怎么回事。如果返回的是api服务器,那么它试图保护的是什么?
下面是jsonp调用的示例:
$.getJSON( 'http://myapi.com?callback=?', {biz: 'buzz'})我看到一些关于为跨源问题设置头部的帖子--但不确定为什么jsonp请求需要这样做。
发布于 2014-04-12 01:27:21
您需要向sinatra api应用程序添加jsonp支持。
以下是将jsonp支持添加到sinatra应用程序的一种方法
将rack-contrip gem添加到Gemfile中
gem 'rack-contrib'将以下内容添加到您的config.ru
require 'rack/contrib'
use Rack::JSONP重新启动sinatra应用程序并开始从javascript测试jsop
https://stackoverflow.com/questions/23013923
复制相似问题