jQuery AJAX头授权

jQuery AJAX头授权,jquery,webtrends,Jquery,Webtrends,我正在尝试基于授权一个AJAX查询。它使用加密库在发送前设置请求头,并提供适当的授权信息。我遇到的问题是,似乎没有根据请求设置标题。这是我的密码: beforeSend : function(xhr) { var bytes = Crypto.charenc.Binary.stringToBytes(username + ":" + password); var base64 = Crypto.util.bytesToBase64(bytes); xhr.setRequestHead

我正在尝试基于授权一个AJAX查询。它使用加密库在发送前设置请求头,并提供适当的授权信息。我遇到的问题是,似乎没有根据请求设置标题。这是我的密码:

beforeSend : function(xhr) {
  var bytes = Crypto.charenc.Binary.stringToBytes(username + ":" + password);
  var base64 = Crypto.util.bytesToBase64(bytes);
  xhr.setRequestHeader("Authorization", "Basic " + base64);
},
<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> 

问题不是将
数据类型设置为
JSONP
。由于没有这样做,浏览器将调用解释为标准AJAX请求,这意味着它在同源策略下被阻止

<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> 
工作代码供参考(推荐Crpyto需归功于@pdeschen):

<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> 

//定义变量
var用户名=“”;
var密码=“”;
var url='';
//ajax调用
$.ajax({
url:url,
数据类型:“jsonp”,
发送前:函数(xhr){
//从用户名+密码生成base 64字符串
var bytes=Crypto.charenc.Binary.stringToBytes(用户名+“:”+密码);
var base64=Crypto.util.bytesToBase64(字节);
//设置标题
xhr.setRequestHeader(“授权”、“基本”+base64);
},
错误:函数(){
//错误处理程序
},
成功:功能(数据){
//成功处理者
}
});
这似乎终于适合我了。单个呼叫可能会发生冲突。将此方法设置为未来连接选项的默认方法

<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> 
//Function( jqXHR jqXHR )
$.ajaxSetup( {beforeSend: function(jqXHR) {
    jqXHR.setRequestHeader( "My-Header", "My-Value" );
} } );

是什么让你认为标题没有设置?您检查过实际的xhr调用吗?
加密
用户名
密码
是否可以设置为
未定义
?您还可以使用curl并设置头(-H),看看这是否不是服务器端的问题。顺便说一句,我是写这篇博文的人;-)我正在写对日志的xhr调用,我在对象中寻找什么?我已经检查过了,所有3个都定义正确。目前的情况是,我收到了一个401未经授权的错误,原因很明显。这很好,很好的帖子。使用Chrome,如果您打开开发者工具,选择网络选项卡,然后选择底部列表中的XHR元素,您可以检查实际的ajax请求、其内容、标题和所有内容。似乎
ajaxSetup
不再存在,所以我使用了
ajaxSend
$(文档)。ajaxSend(函数(e,xhr,settings){xhr.setRequestHeader(“Authorization”,“mytoken”);})
。你也可以用
btoa(username+”:“+password)
@DanielHigueras Nice!不知道这个函数,[看起来它只在IE 10+]中可用,但是嘿..拧IE