5

我在stackoverflow上查看了以下问题,但我尝试做的事情没有运气。

Ajax 授权请求标头一次又一次地失败

jQuery Ajax 未经授权的 401 错误

使用跨域帖子发送凭据?

这是我目前拥有的代码:

    $(document).ready(function() {
        $.ajax({
            url: 'http://sample.domain.com/script.php?name1=value1&jsonp=?',
            type: 'GET',
            dataType: 'json',
            contentType: "application/json",
            beforeSend: function(xhr) {
                 xhr.setRequestHeader("Authentication", "Basic ZnJvbWFwcGx********uOnRoM24zcmQ1UmgzcjM=") //Some characters have been replaced for security but this is a true BASE64 of "username:password"
            },
            success: function(data){
                alert(data);
            }
        });
    });


</script>

我拥有的子域受 .htpasswd 文件的密码保护。使用 base64 编码中使用的用户名/密码组合,该站点的登录对我来说工作得很好。

我在与 url 所在的域不同的域上运行此脚本,这就是为什么我有 jsonp=? 在网址中

我从浏览器中的控制台得到的响应是: GET http://sample.domain.com/script.php?name1=value1&jsonp=jsonp1334177732136 401 (Authorization Required)

4

2 回答 2

6

标题名称是Authorization,您正在发送“ Authentication

例如

授权:基本 QWxhZGRpbjpvcGVuIHNlc2FtBmU=

于 2013-08-16T20:21:07.660 回答
4

JSONP 使用脚本标签代理。它不支持自定义标题。您是否可以控制端点?如果是这样,请考虑启用 CORS,或在 GET 字符串中传递身份验证密钥。

使用 jsonp 时,JQuery 将您的 URL“ajax”请求转换为:

<script src="[endpoint]"></script>

然后它写一个随机函数

var json9409d0sf0d9s0df90 = function() {
     //some callback logic here.
}

并附加 ?callback=json9409d0sf0d9s0df90

你的服务器然后说

echo $_GET['callback] . "(" . $json . ")";

并将其作为响应发回

json9409d0sf0d9s0df90({some: data});

由浏览器执行并由 jQuery 的神奇处理程序处理,使其像正常的 ajax 回调一样响应。

AFAIK,<script src=""></script>资产加载不会采用任何标准浏览器的自定义标题。

于 2012-04-11T21:59:05.057 回答