4

我试图理解和解决这个 InertiaJs 错误但没有成功我希望我能在这里得到一些帮助。 有效的惯性响应

4

3 回答 3

4

也许你正在使用 this.$inertia,它等待 Inertia 响应;

this.$inertia.get(route('example'))
  .then(res => {
     console.log(res)
  })

请使用 axios。反而

axios.get(route('example'))
  .then(res => {
     console.log(res)
  })
于 2021-04-19T16:13:39.440 回答
3

你可以到这个

axios.get("http://example.com",).then((res) => {
   console.log(res.data)
})
于 2021-01-02T04:20:02.920 回答
1

如果你使用 Laravel Jetstream 和 Inertia 前端托管在一个域上,另一个域托管你的 Laravel 后端,那么 CORS 可能与这种行为有关。

我遇到了同样的问题,在查看 innertia.js 的代码后,我发现了这个,它可以触发模式,它正在响应的标题中寻找“x-inertia”:

isInertiaResponse(response) {
    return response?.headers['x-inertia']
}

这已经在响应的标题中(如果您使用 Inertia::render):

X-Inertia: true

只有浏览器不会将此标头提供给 javascript,出于安全原因,这是由您的浏览器完成的。

您可以尝试将其添加到您的 config/cors.php :

'exposed_headers' => ['x-inertia']

如果您使用浏览器的网络检查器,您将在响应中看到添加的标题:

Access-Control-Expose-Headers: x-inertia

基于此标头,浏览器将使 'X-Inertia' 标头可用于 javascript(并且弹出窗口将消失)。

考虑到 CORS 是一种安全措施,以这种方式添加内容可能会带来安全风险,尤其是在使用通配符而不是定义的值时,为了完整并使此示例正常工作,config/cors.php 也需要这个:

'allowed_origins' => ['your-frontend.domain'],
'paths' => [ '/path-you-are-requesting' ],
'allowed_methods' => [ 'GET' ]
'allowed_headers' => [ 'content-type,x-inertia,x-inertia-version,x-requested-with' ]
于 2021-05-17T14:48:38.823 回答