我一直在我的 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/