2

我需要告诉Ajax.Request(从Prototype.js)设置xhr.transport.withCredentialstrue(在我的跨站点请求标头中启用 cookie)。我尝试失败:

Ajax.Request('http://otherSubdomain.host:port/', {
    onCreate: function(request){
        request.transport.withCredentials = true;
    }
});

Access-Control-Allow-Origin已设置且request成功,但未发送任何 cookie

我不想指出,但使用jquery here is an似乎要容易得多example solution

4

2 回答 2

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
});
于 2012-11-30T08:05:06.817 回答
1

稍微改进了维克多的答案。

修复了 IE 中需要在“打开”和“发送”之间设置 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
  }
});
于 2016-07-21T09:06:55.297 回答