Vue控制台报错Uncaught (in promise) TypeError: Cannot read property 'instructor' of undefined at eval
代码如下
ajax.POST('login', loginData) // axios里data与params区别
.then(function (res) {
that.loginStatus.loading = false
if (res.data['instructor'] === 'instructor') {
roleInfo.role = 'instructor'
}
php代码
public function login () {
$dataArr = request()->param();
$role = $dataArr['role'];
$instructor = '';
if ($role === 'admin') {
$selectSql = "select admin_username as fullname,password from beta_administrator where admin_username = ?";
} elseif ($role === 'student') {
$selectSql = "select stu_name as fullname,password from beta_student where stu_number = ?";
}else {
$selectCounselorSql = "select * from beta_instructor where ins_number = ?";
$selectCounselorRes = Db::query($selectCounselorSql, [$dataArr['username']]);//获取结果集
$vs = check_before_add_data($selectCounselorRes);//判断结果集是否为空
if ( $vs === 1 ){
$instructor = 'instructor';
}
$selectSql = "select tea_name as fullname,password from beta_teacher where tea_number = ?";
}
$selectRes = Db::query($selectSql, [$dataArr['username']]);
$v = check_before_add_data($selectRes);
if ($v === 1) {
if ($selectRes[0]['password'] === $dataArr['password']) {
return_json(['fullName' => $selectRes[0]['fullname'],'instructor' => $instructor], 'ok', 200);
} else {
return_json('','账户或密码错误',400);
}
} elseif ($v === 0) {
return_json('','用户名不存在',400);
} else {
return_json('','登录失败,未知错误',400);
}
}
}
请求大神指正
参考GPT和自己的思路:
根据你提供的代码,可能出错的地方是在第4行的判断语句中,判断res.data中是否有'instructor'属性,但是根据报错信息来看,'res.data'可能是undefined,导致无法获取'instructor'属性。这很可能是由于异步请求返回时间过长,导致在then函数中操作数据时,res.data还没有被赋值或被赋值为undefined。
需要我们先确定ajax.POST()方法返回的Promise对象是否正确、是否调用成功了。另外,在代码中,无论返回成功或失败,都需要在.then()的函数中进行处理。比如我们可以在.then()的函数中用console.log()语句打印出res的值,看看其是否与预期相符。如果不行,还需要根据返回状态码(res.status)进一步定位问题所在。
如果以上操作都没有发现问题,可以尝试增加一个.catch()的函数,来捕捉可能存在的错误。具体代码如下:
ajax.POST('login', loginData)
.then(function (res) {
that.loginStatus.loading = false
if (res.data && res.data['instructor'] === 'instructor') { // 判断res.data是否存在
roleInfo.role = 'instructor'
}
})
.catch(function (error) {
console.log(error)
});
同时,我们还需要确保服务器端的代码没有问题。在PHP代码中,也应该对返回的数据进行判断处理,如判断是否成功、是否存在、密码是否匹配等。可以使用类似于在JavaScript中的try...catch语句进行处理,确保代码可以正常运行。
总之,要定位这个问题,我们需要对代码进行多个方面的调试和分析,才能找到问题的根源,并最终解决它。