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

时间:2013-02-21 16:10:32

标签: javascript jquery

我正在尝试将Kippt API与$ .ajax一起使用。

当我使用

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(UNAUTHORIZED)错误。我确信我使用的是正确的用户名和令牌。发生了什么事?

1 个答案:

答案 0 :(得分:5)

您无法使用JSONP dataType设置标头。通过将<script>标记插入到文档中并将src设置为目标位置来创建JSONP请求,并且由于您无法使用标记传递标题,因此将忽略您的标题设置。

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