$.ajax请求总是401(未授权)

$.ajax request always 401 (UNAUTHORIZED)

本文关键字:授权 ajax 请求      更新时间:2023-09-26

我正在尝试使用带有$.ajax.的Kippt API

当我使用时

curl -X GET -H "X-Kippt-Username:graph1ZzLle" -H "X-Kippt-API-Token:mytoken" https://kippt.com/api/clips/

一切运行良好,我得到了JSON响应。

然而,当要将jQuery与以下脚本一起使用时:

<script type="text/javascript">
var username = "graph1ZzLle";
var token = "*******";
$(document).ready(function() {
    $.ajax({
        url: "https://kippt.com/api/clips/?list=all&include_data=list&limit=10",
        type: 'GET',
        dataType: 'jsonp',
        async: false,
        beforeSend: function(xhr) {
            xhr.setRequestHeader('X-Kippt-Username', username)
            xhr.setRequestHeader('X-Kippt-API-Token', token)
        },
        success: function(data) {
            for(var i = 0; i < data.objects.length; i++) {
                var row = $("<tr/>");
                var date = new Date(data.objects[i]["created"] * 1000); //js works in milliseconds
                $("<td/>").text(date.toLocaleDateString()).appendTo(row);
                $("<td/>").text(data.objects[i]["list"]["title"]).appendTo(row);
                $("<td/>").append("<a href=" + data.objects[i]["url"] + " >" + data.objects[i]["title"] + "</a>").appendTo(row);
                if(data.objects[i]["notes"]) {
                    $("<td/>").text(data.objects[i]["notes"]).appendTo(row);
                } else {
                    $("<td/>").text("-----").appendTo(row);
                }
                row.appendTo("#kippt");
            }
        },
    });
});
</script>

我总是遇到401(未授权)错误。我确信我使用的是正确的用户名和令牌。发生了什么事?

您不能用JSONP数据类型设置头。JSONP请求是通过在文档中插入一个<script>标记来创建的,src设置为目标位置,并且由于不能使用标记传递标头,因此会忽略标头设置。

可以使用CORS和JSON,也可以使用为您获取数据的服务器端代理。