javascript - Backbone.js 不会发出跨主机请求?

标签 javascript google-chrome backbone.js cross-domain

我一直在我的 Chrome 控制台中使用 Backbone,遇到了一个我无法弄清楚的跨域问题。

我正在连接的主机可能正确地实现了 CORS,因为原始 XHR 请求返回了预期的 JSON:

var http = new XMLHttpRequest();
http.open('GET', 'http://example.com:3000/entities/item/15.json', true);
http.onreadystatechange = function(evt) { console.log(evt); }
http.send();

(在控制台上记录 3 个 XHR 进度事件,并在响应中提供正确的数据)

但是当我使用 Backbone 执行以下操作时,浏览器不喜欢它:

var Item = Backbone.Model.extend({});
var ItemsCollection = Backbone.Collection.extend({
  model: Item,
  url: 'http://example.com:3000/entities/item/'
});
var items = new ItemsCollection();
items.fetch();

(返回 XMLHttpRequest 无法加载 http://example.com:3000/entities/item/。Access-Control-Allow-Origin 不允许来源 http://localhost:8000。 )

我需要做些什么来让 Backbone 使用 CORS 吗?这个错误似乎在浏览器发出请求之前就出现了,所以我不认为这是服务器配置错误。

最佳答案

我希望其中之一能有所帮助(我还没有尝试过):
1. Overriding Backbone.js sync to allow Cross Origin

(function() {
  var proxiedSync = Backbone.sync;
  Backbone.sync = function(method, model, options) {
    options || (options = {});
    if (!options.crossDomain) {
      options.crossDomain = true;
    }
    if (!options.xhrFields) {
      options.xhrFields = {withCredentials:true};
    }
    return proxiedSync(method, model, options);
  };
})();

2。 Cross domain CORS support for backbone.js

$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
    options.crossDomain ={
        crossDomain: true
    };
    options.xhrFields = {
        withCredentials: true
    };
});

关于javascript - Backbone.js 不会发出跨主机请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16041172/

相关文章:

javascript - 获取选择的选定值

javascript - Node.js 调试流程

javascript - 错误的 Chrome 扩展?

javascript - document.getElementById().style.display = 'none' ;仅适用于 Firefox

javascript - 打印全日历时隐藏按钮

javascript - Bootstraps Affix 是否附加时,如何在元素上添加和删除类

javascript - 同步 CORS XHR 302 重定向失败,但异步工作

javascript - JavaScript 中 self.self == self check 的目标是什么?

javascript - 向对象添加 Backbone 事件,修改时未注册 "on"事件

javascript - backbone.js 中的时间间隔