Все запросы Inertia должны получать действительный ответ Inertia, однако был получен простой ответ JSON.

Я безуспешно пытаюсь понять и устранить эту ошибку InertiaJs, надеюсь, мне здесь помогут. действительный инерционный ответ


person Ismael Kourouma    schedule 02.01.2021    source источник
comment
Добро пожаловать в SO ... как вы возвращаете этот ответ с сервера?   -  person lagbox    schedule 02.01.2021
comment
Не могли бы вы показать код, который вы используете для отправки запроса, и код маршрута / контроллера, который возвращает ответ.   -  person Rwd    schedule 02.01.2021
comment
Ответ правильный, если вы используете axios или ajax. Но используя инерцию, клиент будет ждать инерционного ответа. Ищу тоже какое-то решение.   -  person Manuel Eduardo Romero    schedule 19.04.2021
comment
@lagbox да, я из контроллера laravel, посмотрите мой вопрос здесь: stackoverflow.com/questions/68327441/   -  person ii iml0sto1    schedule 10.07.2021


Ответы (3)


ты можешь к этому

axios.get("http://example.com",).then((res) => {
   console.log(res.data)
})
person Kenedi Novriansyah    schedule 02.01.2021
comment
Не работает, продолжайте получать это как ответ: {cookies: {}, transferStats: {}} - person Benny; 20.04.2021

Возможно, вы используете this. $ Inertia, он ждет ответа по инерции;

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

Пожалуйста, используйте аксиомы. вместо

axios.get(route('example'))
  .then(res => {
     console.log(res)
  })
person Manuel Eduardo Romero    schedule 19.04.2021

Если вы используете 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' ]
person Jan    schedule 17.05.2021
comment
Что делать, если вы не хотите возвращать новое представление? - person ii iml0sto1; 10.07.2021