1

我正在使用 jQuery 的库对 api 进行 ajax 调用,这需要将编码为 base64 的用户名和密码添加到标题中。

这是一个基本示例:

$.ajax({
    type: "GET",
    contentType: 'application/json',
        beforeSend:function(xhr){
        xhr.setRequestHeader("Authentication", "Basic " + base64EncodedValue);
    }
    url: 'https://api.company.com/uri/',
    complete: function(result) {
       alert(result);
    }
});

但是当它触发时,我会收到一个黑色的警报框,所以看起来好像没有什么东西回来了。Firebug 控制台中没有完成获取 ajax 请求的日志。

但是,如果我删除 beforeSend 选项,我确实会看到 ajax 请求被记录,但请求返回“未授权”,所以它肯定命中了正确的位置。

关于为什么它没有出现在 Firebug 中的任何想法,以便我可以验证标头是否正确发送?

4

2 回答 2

1

我会说这是因为您在 url 之前没有“,”...

$.ajax({
    type: "GET",
    contentType: 'application/json',
        beforeSend:function(xhr){
        xhr.setRequestHeader("Authentication", "Basic " + base64EncodedValue);
    }
    ,url: 'https://api.company.com/uri/',
    complete: function(result) {
       alert(result);
    }
});

可能是错的,但这是我的猜测,

安德鲁

于 2010-03-24T20:05:30.910 回答
0

刚刚遇到类似的问题,JQuery 似乎不支持为跨域请求设置 Authentication 标头。

在从端口 80 提供的脚本中,我有:

    $.ajax({
        beforeSend : function(req) {
            req.setRequestHeader('Authorization', auth);
        },
        url: 'http://localhost:8282/Blahblah',
        success: function(data) {
          console.log("data=" + data);
        }
    });

而且我没有看到在请求中设置了 Autorization-header。我把它改成

    $.ajax({
        beforeSend : function(req) {
            req.setRequestHeader('Authorization', auth);
        },
        url: 'http://localhost/Blahblah',
        success: function(data) {
          console.log("data=" + data);
        }
    });

似乎正在发生的事情是 JQuery 检测到这是一个跨域请求(在我的情况下是因为端口的不同,在您的情况下可能是因为不同的主机?)并静默切换到不支持基本身份验证的 JSONP .

请参阅 如何使用带有基本身份验证的 JQuery 进行 JSONP 调用?

我意识到您的问题已经过时了,但是 Google 把我带到了这里,它可能会把其他人带到这里。

于 2012-03-12T14:12:08.647 回答