JWT令牌与jqueryajax

JWT令牌与jqueryajax,jquery,ajax,laravel,jwt,dingo-api,Jquery,Ajax,Laravel,Jwt,Dingo Api,我有一个用Laravel、Dingo和JWT令牌驱动的API。使用PAW测试API调用非常有效。在不使用中间件JWT令牌的情况下使用jQuery运行API调用可以正常工作。但是,只要我尝试使用JWT令牌运行Ajax请求,我就会得到一个401 我是否错过了Ajax请求的一个技巧。你能看到这个代码有问题吗 $.ajax({ url: "http://api.domain.app/products", dataType : 'jsonp', type: 'GET', b

我有一个用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中间件的情况下,这同样可以很好地工作


希望您能提供建议。

我从子域中删除了API,它工作正常。它一定与jsonp和JWT令牌有关。

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

这是对JSONP确切含义的一个很好的解释

你的问题是,“你能看到这个代码有问题吗?”,我已经在上面回答了。 不过,您可能想问的是“如何让授权问题与jQuery一起工作?”。 你说“由于跨域的原因,我不得不使用jsonp”,如果你对“由于跨域的原因”做更多的阐述,那么得到解决方案的答案将更容易。
可能会解决您的问题,但如果没有更多信息,很难判断。

您的代码是正确的。可能您的CORS请求有问题。您是否将jwt存储在Windows本地/会话存储中?因为这不适用于子域。