我正在尝试基于this tutorial授权AJAX查询。它使用Crypto库在发送之前使用适当的授权信息设置请求标头。我遇到的问题是标题似乎没有按要求设置。这是我的代码:
beforeSend : function(xhr) {
var bytes = Crypto.charenc.Binary.stringToBytes(username + ":" + password);
var base64 = Crypto.util.bytesToBase64(bytes);
xhr.setRequestHeader("Authorization", "Basic " + base64);
},
答案 0 :(得分:8)
问题不是将dataType
设置为JSONP
。由于没有这样做,浏览器将该调用解释为标准的AJAX请求,这意味着它在同源策略下被阻止。
工作代码供参考(赠送给@pdeschen以建议Crpyto):
<script type='text/javascript'>
// define vars
var username = '';
var password = '';
var url = '';
// ajax call
$.ajax({
url: url,
dataType : 'jsonp',
beforeSend : function(xhr) {
// generate base 64 string from username + password
var bytes = Crypto.charenc.Binary.stringToBytes(username + ":" + password);
var base64 = Crypto.util.bytesToBase64(bytes);
// set header
xhr.setRequestHeader("Authorization", "Basic " + base64);
},
error : function() {
// error handler
},
success: function(data) {
// success handler
}
});
</script>
答案 1 :(得分:0)
这个终于似乎对我有用。在个人呼叫的基础上可能会发生冲突。将此方法设置为将来连接选项的默认值。
//Function( jqXHR jqXHR )
$.ajaxSetup( {beforeSend: function(jqXHR) {
jqXHR.setRequestHeader( "My-Header", "My-Value" );
} } );