6

我正在尝试根据本教程授权 AJAX 查询。它使用 Crypto 库在发送之前使用适当的授权信息设置请求标头。我遇到的问题是标题似乎没有按要求设置。这是我的代码:

beforeSend : function(xhr) {
  var bytes = Crypto.charenc.Binary.stringToBytes(username + ":" + password);
  var base64 = Crypto.util.bytesToBase64(bytes);
  xhr.setRequestHeader("Authorization", "Basic " + base64);
},
4

2 回答 2

8

问题不在于将 to 设置dataTypeJSONP. 由于这没有完成,浏览器将调用解释为标准 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> 
于 2012-07-23T09:31:02.607 回答
0

最终似乎对我有用。个别呼叫可能会发生冲突。将此方法设置为未来连接选项的默认值。

//Function( jqXHR jqXHR )
$.ajaxSetup( {beforeSend: function(jqXHR) {
    jqXHR.setRequestHeader( "My-Header", "My-Value" );
} } );
于 2014-09-19T20:24:30.670 回答