【发布时间】:2011-01-04 11:43:39
【问题描述】:
根据Requests with credentials,如果
invocation.withCredentials = "true";
已设置……但 jQuery 的 Ajax API 似乎没有为此提供任何机制。
有什么我错过的吗?有没有其他方法可以做到?
【问题讨论】:
标签: javascript jquery cross-domain
根据Requests with credentials,如果
invocation.withCredentials = "true";
已设置……但 jQuery 的 Ajax API 似乎没有为此提供任何机制。
有什么我错过的吗?有没有其他方法可以做到?
【问题讨论】:
标签: javascript jquery cross-domain
您可以使用beforeSend 回调设置其他参数(XMLHTTPRequest 对象作为其唯一参数传递给它)。
请注意,这种类型的跨域请求在正常站点场景中不起作用,并且不适用于任何其他浏览器。我什至不知道 FF 3.5 也施加了哪些安全限制,以免你无缘无故地撞墙:
$.ajax({
url: 'http://bar.other',
data: { whatever:'cool' },
type: 'GET',
beforeSend: function(xhr){
xhr.withCredentials = true;
}
});
还有一点需要注意,jQuery 是为了规范浏览器差异而设置的。您可能会发现 jQuery 库施加了更多限制,禁止此类功能。
【讨论】:
method: 'GET'。 api.jquery.com/jquery.ajax
功能应该在 jQuery 1.5 中被破坏。
从 jQuery 1.5.1 开始,您应该使用 xhrFields 参数。
$.ajaxSetup({
type: "POST",
data: {},
dataType: 'json',
xhrFields: {
withCredentials: true
},
crossDomain: true
});
【讨论】:
在 jQuery 3 甚至更早的版本中,以下更简单的配置也适用于单个请求:
$.ajax(
'https://foo.bar.com,
{
dataType: 'json',
xhrFields: {
withCredentials: true
},
success: successFunc
}
);
我在 Firefox 开发工具 -> 网络选项卡(在单个请求的安全选项卡中)遇到的完整错误是:
连接到 foo.bar.com.SSL 对等体期间发生错误 无法协商一组可接受的安全参数。错误 代码:SSL_ERROR_HANDSHAKE_FAILURE_ALERT
【讨论】: