我可以在非SPA项目上使用Axios吗?

时间:2019-01-07 20:44:49

标签: javascript laravel

我已经厌倦了ajax漫长的发送请求样式,我在SPA项目上使用了axios,它非常酷,我检查了您的文档以查看其工作原理和效果,但是,如果我尝试发出请求它会拖出一个未经身份验证的错误,我正在使用Laravel php框架作为我的代码后端,如果我尝试直接在ajax上运行它,它会起作用,或者也可以在一个正常形式下起作用。

另外,我在任何地方都没有任何身份验证中间设置。

这是Axios Library库的文档

这是我的示例代码

FROM jekyll/builder as build
WORKDIR /tmp
COPY . /tmp

RUN jekyll build

FROM pierrezemb/gostatic

COPY --from=build /tmp/_site /srv/http

我只返回控制器中的所有请求,并不特殊

所以我的问题是axios或laravel是否有问题,或者我不能在没有任何SPA框架(例如react,vue等)的情况下使用axios。

谢谢。

2 个答案:

答案 0 :(得分:1)

它未经身份验证,因为您没有在标题中设置X-CSRF-TOKEN

您要在config对象上设置X-CSRF-TOKEN属性,但这是没有意义的。

axios.get('/home', {} , {
            headers: {
                'X-CSRF-TOKEN'    : "{{csrf_token()}}",
                // X-Requested-With is an ugly hack and you should use an Accept header instead of this (not as well as!)
                'X-Requested-With': 'XMLHttpRequest',
                'Accept' : 'application/json',
                // You're making a GET request. There is no request body to describe the content-type of.
                // 'Content-Type' : 'application/x-www-form-urlencoded',
            }
        })

答案 1 :(得分:1)

如果您的axios配置位于js文件中,则必须执行以下步骤

1-您必须将此元数据放在页面布局标题中

<meta name="csrf-token" content="{{ csrf_token() }}">

2-然后更改

'X-CSRF-TOKEN'    : "{{csrf_token()}}",

'X-CSRF-TOKEN'    :document.querySelector('meta[name="csrf-token"]').getAttribute('content'),

在您的js文件中

并对其进行测试,如果它起作用了,那么您的问题是因为js文件不是刀片文件,因此您的axios配置中的{{csrf_token()}}不会被laravel渲染为csrf令牌