2011-06-26 37 views
20

我想使用backbone.js和jquery。该应用程序应该在手机上离线运行(即“本地主机”),但在互联网某处的服务器端后端几乎没有呼叫。backbone.js和跨域脚本

通过backbone.js实现跨域请求的最佳方式是什么?

我想使用JSON,但如果需要,我最终可以切换回REST。

这里是我不是很可观到目前为止的代码:

App.Collections.Events = Backbone.Collection.extend({ 
    model: Event,  
    url: 'http://mydomain.com/api/getevents/user_id/1/' 
}); 
+11

不知道我明白“我想使用JSON,但如果需要,最终可以切换回REST。” - JSON和REST不是/或事物,JSON是将数据序列化为字符串的格式,REST是一种Web服务接口模式。我会发布一个答案,并调整,如果你有任何澄清。 – Stoive

回答

38

有允许跨域XMLHttpRequest,这是Backbone.js的使用从URL中提取数据的方法有两种方式。如果您已经控制了您要连接的非原始域的服务器端,并且涉及到实施Cross-Origin Resource Sharing(或CORS),则第一种方法是适当的。

要实现CORS,返回“原点”部分的HTTP Referer请求头(位到path的开始;它应该与正则表达式^.+?\/{2}[^\/]*)在Access-Control-Allow-Origin响应头为要起到域:

Access-Control-Allow-Origin: http://mydomain.com 

您可能需要重写Backbone.sync为了使right settings到XMLHttpRequest对象上设置。

如果您无权访问跨源服务器,则第二种选择是通过您自己的服务器(原始服务器或启用CORS的服务器)对代理请求进行代理。很明显,拥有你试图打电话给的域名的人可能不会喜欢你这样做,但那是在设计上 - 如果他们不想让你打电话给你的服务,他们只有一个IP地址来阻止,而不是你的每一个客户的IP。

+0

哇,那很简单!感谢名单! :-)对我来说,它与http://mydomain.com顺带工作没有斜杠 – herrjeh42

+3

没问题!现在,如果这涵盖了所有内容,请将其标记为正确的答案。谢谢:) – Stoive

+0

感谢您指点我的“正确答案”功能,Stoive! – herrjeh42