我正在做一个ribs.js项目,我在叫我的github仓库。我已经引导了我的Collections和Models,因此一旦构建页面,它们就会存在,但是当我调用model.fetch()时,我收到以下消息:(用用户名替换:username)
XMLHttpRequest cannot load https://api.github.com/users/:username. Origin http://mydomain.com is not allowed by Access-Control-Allow-Origin.
我已经读了几则消息post1,post2,它们提到了修改ribs.sync函数,但我不完全确定该怎么做。到目前为止,这是我的代码(这在我的Backbone.Router中):
userDetails: function(id) { console.log('Loading: userDetails'); var User = Users.get(id); User.fetch({dataType: "jsonp"}); console.log(User); userView = new UserView({ model: User }); userView.render(); },
谢谢!
在后端启用了CORS。jQuery的基础知道何时发出跨域请求并相应地对其进行修改。问题是服务器在这种情况下api.github.com不允许CORS请求。
api.github.com
服务器必须至少响应:
Access-Control-Allow-Origin: * (or the host in which your page is being served)
由于您可能不拥有github,因此您必须编写服务器端代理,或者查看github是否可以为您提供JSONP调用(jQuery也很乐意为您提供)。
MDN有关访问控制的文档
编辑
话虽如此,如果您需要通过主干修改jQuery发出的请求,则无需重写该sync方法。使用jQuery的$.ajaxSetup方法添加任何其他标头,设置类型等。只需确保$.ajaxSetup在与相同的上下文或闭包中运行该方法.save(),.fetch()否则.destroy()将要运行,否则您将无法获得执行的工作。$.ajaxSetup
sync
$.ajaxSetup
.save()
.fetch()
.destroy()