天天看点

javascript加RoR实现JSONP

我们知道不同域中的js代码受同源策略的限制,不同域中的ajax同样受此限制,不过使用html中的script远程脚本可以跳过该限制,下面我们实际看一下利用ror和js如何实现所谓的jsonp。

这里只是简单地演示一下功能,并没有严格的实现jsonp,如果是那样需要用一个函数包容json对象主体:

而这里的包容函数名称也不需要定死,而是可以通过http参数告知web服务器,比如可以用以下url的方式:

当然这只是一个约定,你可以用其他任意的方式告知服务器。

我们下面实现一个不严格的jsonp。首先用如下命令创建新的ror网站:

在service控制器的func0方法中增加如下代码:

然后在rails的app/views/service目录中添加func0.js.erb文件,内容如下:

注意因为我们在func0中返回的response不是一个html页面,所以正常的通过url访问func0会出错的:

下面我们建立一个本地html文件,内容如下:

如果直接打开该页面会出错,因为你在服务器端没对此action关闭外联保护,在ror中显示如下错误:

我们只需要对func0 action关闭保护即可:

注意config中的保护也是要关闭的:

然后再次在浏览器中打开本地html文件,成功执行了web服务器中传回的js脚本,该脚本能做的事只受限于想象力而已。

继续阅读