5

我有一个由 Laravel、Dingo 和 JWT 令牌驱动的 API。使用 PAW 测试 API 调用非常有效。在没有中间件 JWT 令牌禁用的情况下使用 jQuery 运行 API 调用可以正常工作。但是,一旦我尝试使用 JWT 令牌运行 Ajax 请求,我就会得到 401。

我错过了 Ajax 请求的技巧吗?你能看出这段代码有问题吗?

$.ajax({
    url: "http://api.domain.app/products",
    dataType : 'jsonp',
    type: 'GET',
    beforeSend : function(xhr) {
        xhr.setRequestHeader("Accept", "application/json");
        xhr.setRequestHeader("Content-Type", "application/json");
        xhr.setRequestHeader("Authorization", "Bearer XXXX");
    },
    error : function() {
        // error handler
    },
    success: function(data) {
        console.log(data);
        return data;
    }
});

由于跨域,我不得不使用 jsonp。但是,这在关闭 JWT 中间件时也能正常工作。

希望你能给点建议。。

4

2 回答 2

1

我从子域中删除了 API,它的工作正常。它必须与 jsonp 和 JWT Tokens 有关。

于 2015-12-01T23:22:57.747 回答
1

HTTP 状态代码 401 用于“未授权”,表示需要身份验证并且已失败或尚未正确提供。在这种情况下,这是因为它没有被正确提供。您正在尝试在beforeSend参数中提供它。beforeSend为您提供了在发送之前对其进行操作的机会XMLHttpRequest,但问题是,您使用的是 JSONP。而 JSONP 因为 JSONP 只是一个<script>标签插入技巧,它不使用XMLHttpRequest,所以操作它是没有意义的。

是关于 JSONP 到底是什么的一个很好的解释。

你的问题是,“你能看出这段代码有问题吗?”,我在上面已经回答过了。不过,您可能想问的是“我如何获得使用 jQuery 的授权问题?”。您说“由于跨域,我不得不使用 jsonp”,如果您详细说明“由于跨域”,那么导致解决方案的答案将更容易产生。 这个问题的答案可能会解决您的问题,但如果没有更多信息,很难判断。

于 2016-10-18T03:53:32.507 回答