甚至可以从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。
答案 0 :(得分:0)
如果你想要执行catch并且这是在服务器端决定的,那么你需要通过http_response_code设置一个不成功的状态代码。在您的情况下,状态代码417(期望失败)似乎是一个不错的选择,但您可以看到here您可以选择的内容。