首页 > 解决方案 > php - js 承诺捕获的返回错误

问题描述

甚至有可能从 ajax 调用接收并作为错误接收的 php 文件返回某种错误(即使用 header())(通过 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 中的 catch 应该以正确的方式做出反应。事实上它不是 - 在 chrome-dev-tools 我得到一个错误:

xhr.js?ec6c:178 OPTIONS 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 而不是 .catch 来管理它?

卡雷格。

标签: javascriptphpajaxpromise

解决方案


如果你想执行 catch 并且这是在服务器端决定的,那么你需要通过http_response_code设置一个不成功的状态码。状态代码 417(预期失败)在您的情况下似乎是一个不错的选择,但您可以在此处查看可以选择的内容。


推荐阅读