php - возвращает ошибку для js обещания поймать - PullRequest
0 голосов
/ 22 мая 2018

Возможно ли вообще вернуть какую-то ошибку (то есть, используя header ()) из php-файла, который получен вызовом ajax и получен как ошибка (через метод catch?)

рассмотрим такой php (пример работает некорректно):

<?php 

session_start();

$_SESSION['user_id'] = 1;

 header("Access-Control-Allow-Origin: *");
 header("Access-Control-Allow-Credentials: true");
 header("Access-Control-Allow-Methods: GET,HEAD,OPTIONS,POST,PUT");
 header("Access-Control-Allow-Headers: Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");



if ( $_SESSION['user_id'] == 0 ) {
        header('Content-Type: application/json');
        print json_encode(["test" => 123]);
    }
else
    {
       header('HTTP/1.1 1337 Internal Server Kalreg');
       header('Content-Type: application/json; charset=UTF-8');
        die(json_encode(array('message' => 'ERROR', 'code' => 1337)));
}
?>

и js:

axios.get('loginStatus.php', { crossDomain: true })
        .then(function (response) {
        console.log(response);
        })
        .catch(function (error) {
          console.log(error);
        });


    }
  }

Теперь, когда $ _SESSION ['user_id'] установлен в 1, генерируется ошибка сервера, и из-за этого перехватав JS должны реагировать должным образом.На самом деле это не так - в chrome-dev-tools я получаю ошибку:

xhr.js? Ec6c: 178 ВАРИАНТОВ http://192.168.0.15/game/src/server/loginStatus.php 500 (Внутренняя ошибка сервера) Ошибка загрузки http://192.168.0.15/game/src/server/loginStatus.php: Ответ на предпечатную проверку имеет недопустимый код состояния HTTP 500.

Возможно ли это?Или я должен вернуть только файл JSON с ошибкой или нет и управлять им с помощью .then not .catch?

Kalreg.

1 Ответ

0 голосов
/ 22 мая 2018

Если вы хотите, чтобы перехват выполнялся и это решалось на стороне сервера, то вам нужно будет установить неудачный код состояния через http_response_code .Код состояния 417 (ожидание не выполнено) кажется хорошим выбором в вашем случае, но вы можете увидеть здесь что вы можете выбрать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...