Я безуспешно пытаюсь понять и устранить эту ошибку InertiaJs, надеюсь, мне здесь помогут.
Все запросы Inertia должны получать действительный ответ Inertia, однако был получен простой ответ JSON.
Ответы (3)
ты можешь к этому
axios.get("http://example.com",).then((res) => {
console.log(res.data)
})
Возможно, вы используете this. $ Inertia, он ждет ответа по инерции;
this.$inertia.get(route('example'))
.then(res => {
console.log(res)
})
Пожалуйста, используйте аксиомы. вместо
axios.get(route('example'))
.then(res => {
console.log(res)
})
Если вы используете 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' ]