php - js的返回错误承诺捕获

时间:2018-05-22 11:48:29

标签: javascript php ajax promise

甚至可以从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选项   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?

进行管理

Kalreg。

1 个答案:

答案 0 :(得分:0)

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