我想使用具有我控制的REST api的Backbone.js。我希望REST api和主干脚本位于不同的域上,但不幸的是,这将被阻止,因为这是一个跨域请求。
Backbone.js有没有内置的功能来支持JSONP请求?或者,有没有人有向Backbone.js sync system手动添加JSONP支持的经验?
发布于 2011-08-24 19:48:11
您将无法在JSONP中使用整个REST API。您只能使用JSONP调用GET请求(它的工作方式是在当前文档上编写一个新的<script>标记,然后调用javascript回调...)。
要使用all HTTP verb (POST、DELETE、PUT),可以使用CORS协议:http://www.w3.org/TR/access-control/。
Javascript CORS是在浏览器和
服务之间协商的协议,它告诉浏览器可以从跨域调用中执行Javascript代码
要使用它,您只需在服务器响应中包含一些自定义标头,告诉浏览器可以接受跨域请求。这里有一篇博客文章解释了如何用RubyOnRails实现它(但它应该与其他框架非常相似...):http://www.tsheffler.com/blog/?p=428
这是最简单的解决方案,你可以像在同一个域中一样使用backbone.js,而且它可以与大多数当前的浏览器( it 8+,火狐3.5+,Safari 4+和Chrome)一起使用!
如果您需要较旧的浏览器支持,我确实设法使用easyXDM使backbone工作:
easyXDM是一个Javascript库,它使您作为开发人员能够轻松地解决由同源策略设置的限制,从而使跨域边界通信和公开javascript API变得更加容易。
它有点复杂,并且使用一些众所周知的iframe hack(有时会用在javascript widgets中,比如GMaps,facebook widgets,...)。
希望这对你有所帮助!
发布于 2012-04-03 23:22:42
可以通过fetch的选项添加对GET操作的JSONP支持。
在配置success和error处理程序的相同散列中,添加一个对象,如下所示:
{dataType: "jsonp"}
这将把jsonp选项传递给JQuery的ajax处理程序,自动地,您将拥有对检索模型/集合的JSONP支持。
https://stackoverflow.com/questions/7169270
复制相似问题