小编典典

如何使用CORS和骨干向API发出Ajax请求

ajax

我正在做一个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.

我已经读了几则消息post1post2,它们提到了修改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();
},

谢谢!


阅读 229

收藏
2020-07-26

共1个答案

小编典典

在后端启用了CORS。jQuery的基础知道何时发出跨域请求并相应地对其进行修改。问题是服务器在这种情况下api.github.com不允许CORS请求。

服务器必须至少响应:

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

2020-07-26