根据Requests with credentials,如果
,Firefox只会发送凭据以及跨域帖子 invocation.withCredentials = "true";
已设置...但似乎jQuery的Ajax API并没有为此提供任何机制。
有什么我错过的吗?还有其他方法可以做到吗?
答案 0 :(得分:146)
在jQuery 1.5中应该打破功能。
从jQuery 1.5.1开始,你应该使用xhrFields param。
$.ajaxSetup({
type: "POST",
data: {},
dataType: 'json',
xhrFields: {
withCredentials: true
},
crossDomain: true
});
答案 1 :(得分:39)
您可以使用beforeSend
回调来设置其他参数(XMLHTTPRequest
对象作为唯一参数传递给它。
您知道,这种类型的跨域请求在普通站点方案中不起作用,而在任何其他浏览器中都不起作用。我甚至不知道FF 3.5所施加的安全限制,所以你不要无所事事地击败你的头:
$.ajax({
url: 'http://bar.other',
data: { whatever:'cool' },
type: 'GET',
beforeSend: function(xhr){
xhr.withCredentials = true;
}
});
还有一件事需要注意,jQuery是为了规范浏览器差异而设置的。您可能会发现禁止此类功能的jQuery库会产生进一步的限制。
答案 2 :(得分:0)
在jQuery 3和更早版本中,以下更简单的配置也适用于单个请求:
$.ajax(
'https://foo.bar.com,
{
dataType: 'json',
xhrFields: {
withCredentials: true
},
success: successFunc
}
);
我在Firefox开发工具中遇到的完整错误 - > “网络”选项卡(在单个请求的“安全”选项卡中)为:
连接到foo.bar.com.SSL peer期间发生错误 无法协商一组可接受的安全参数。错误 代码:SSL_ERROR_HANDSHAKE_FAILURE_ALERT