我需要使用标头身份验证发送带有跨域来源的Get
请求。
它在Chrome和Firefox中运行良好,但我在Safari和IE中遇到问题。在随机的情况下,它返回401。
<script>
var url = 'username:password@anotherdomain.com';
$.ajax({
url: url,
dataType: 'jsonp',
jsonpCallback: "callback",
success: function(json) {
alert(json);
}
});
</script>
解决这个问题的最佳选择是什么?
答案 0 :(得分:2)
如果我已正确理解了问题,您可以使用beforeSend回调在请求中添加基本身份验证。这与jsonp或cross-origin无关。
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", "Basic " + btoa(username + ":" + password));
}
答案 1 :(得分:1)
对于Internet Explorer 8 and 9
,您需要使用XDomainRequest Object
Internet Explorer 10 + 通常会像所有其他浏览器一样执行跨域请求。
如您需要的文档中所述
var xdr = new XDomainRequest();
xdr.open("get", "username:password@anotherdomain.com");
xdr.send();
完整的代码参考可以在this thread
的@Mark Pieszak上显示作为在Internet Explorer中设置username
和password
的解决方法,您可以设置以下内容
在DWORD
中iexplore.exe
到0
的
[HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE]
。
答案 2 :(得分:0)
我建议你尝试两件事:
在ajaxSetup中,执行以下操作:
'Access-Control-Allow-Origin: https://not-example.com'
'Access-Control-Allow-Credentials: true'
在您的ajax请求中,除了凭据标志外,还要设置完整的URL。
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
对于具有身份验证的服务器,这些浏览器不允许&#34; *&#34;在这个标题中。 Access-Control-Allow-Origin标头必须包含客户端传递的Origin标头的值。
答案 3 :(得分:-3)
使用getJSON
$.getJSON("url",function (data) {/*code here*/});