使用cookie和Prototype.js跨站点Ajax.Request

时间:2012-11-27 21:32:52

标签: prototypejs cross-site

我需要告诉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

2 个答案:

答案 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
  }
});