我需要告诉Ajax.Request
(来自Prototype.js
)将xhr.transport.withCredentials
设置为true
(在我的跨网站请求标头中启用Cookie)。我尝试失败了:
Ajax.Request('http://otherSubdomain.host:port/', {
onCreate: function(request){
request.transport.withCredentials = true;
}
});
Access-Control-Allow-Origin
已设置且request
成功,但未发送Cookie 。
我不想指出,但jquery
似乎更容易
这是一个 example solution 。
答案 0 :(得分:3)
尝试像这样修补Ajax.Request
:
Ajax.Request.prototype.request = Ajax.Request.prototype.request.wrap(function(request, url) {
if (this.options.withCredentials) {
this.transport.withCredentials = true;
}
request(url);
});
然后你会有额外的选项withCredentials
:
new Ajax.Request('example.com', {
withCredentials: true
});
答案 1 :(得分:1)
改善了维克多的答案。
修复IE,需要在'open'和'send'之间设置withCredentials,并使其与jQuery ajax选项保持一致。
Ajax.Request.prototype.setRequestHeaders = Ajax.Request.prototype.setRequestHeaders.wrap(function(setHeaders) {
setHeaders();
if (this.options.xhrFields) Object.extend(this.transport, this.options.xhrFields);
});
然后使用它:
new Ajax.Request('example.com', {
xhrFields: {
withCredentials: true
}
});