【问题标题】:backbone.js and cross domain scripting主干.js 和跨域脚本
【发布时间】:2011-09-23 02:14:54
【问题描述】:

我想使用backbone.js 和jquery。该应用程序应该在手机上离线运行(即“localhost”),在互联网某处的服务器端后端上几乎没有调用。

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

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

到目前为止,这是我不太令人印象深刻的代码:

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

【问题讨论】:

  • 不确定我是否理解“我想使用 JSON,但如有必要,我最终可以切换回 REST。” - JSON 和 REST 不是非此即彼的,JSON 是一种将数据序列化为字符串的格式,REST 是一种 Web 服务接口模式。如果您有任何澄清,我会发布答案,并进行调整。

标签: jquery cross-domain backbone.js


【解决方案1】:

有两种方法允许跨域 XMLHttpRequests,这是 Backbone.js 用来从 URL 获取数据的方法。如果您已经控制了您尝试连接的非源域的服务器端,则第一个是合适的,并且涉及实现Cross-Origin Resource Sharing(或 CORS)。

要实现 CORS,请在域的 Access-Control-Allow-Origin 响应标头中返回 HTTP Referer 请求标头(直到 path 开头的位;它应该匹配正则表达式 ^.+?\/{2}[^\/]*)的“来源”部分您想服务于:

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

您可能需要覆盖 Backbone.sync 以便在 XMLHttpRequest 对象上设置 right settings

如果您无权访问跨域服务器,则第二种选择是通过您自己的服务器(源服务器或启用 CORS 的服务器)代理请求。显然,拥有您尝试调用的域的人可能不喜欢您这样做,但这是设计使然 - 如果他们不希望您调用您的服务,他们只有一个 IP 地址要阻止,而不是您的每个客户的 IP。

【讨论】:

  • 哇,这很简单!谢谢! :-) 对我来说,它与mydomain.com 一起工作,没有斜线
  • 没问题!现在,如果这涵盖了所有内容,请将其标记为正确答案。谢谢:)
  • 感谢您指出“正确答案”功能,Stoive!
  • CORS 是 ie10+,在这个条件下你可以使用 jsonp 和 XDomainObject 来解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多