javascript - 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 来管理它?
卡雷格。
解决方案
如果你想执行 catch 并且这是在服务器端决定的,那么你需要通过http_response_code设置一个不成功的状态码。状态代码 417(预期失败)在您的情况下似乎是一个不错的选择,但您可以在此处查看可以选择的内容。
推荐阅读
- linux - 无法使用 SSH 连接 AWS EC2 实例
- javascript - 如何通过 JavaScript/JQuery 更改选定的 DropDownList 项目?
- javascript - Three.js - 关于 StereoCamera 中 eyeSep 的问题
- postgresql - 如何提高 PostgreSQL 的性能?
- python - Python 3 - 如何像直接替换一样执行字符串?
- python - Pandas:如何获得满足条件的最前一行?类似于可变长度移位的东西
- python - 为什么使用 Airflow 插件
- regex - 如何为具有空格和最小最大长度的名称提供正则表达式?
- string - Ansible jinja2 比较字符串不区分大小写
- node.js - 从数据库获取文件后无法将项目推送到数组中