function api(column, value) {
const url = "<?php echo base_url(); ?>webapi/user/exist_unique_column_data";
let params = {
method: 'POST',
headers: new Headers({'Content-Type': 'application/x-www-form-urlencoded'}),
body: 'column_name=' + column + '&column_value=' + value + '&token=' + token
};
fetch(url, params)
.then((response) => response.json())
.then((responseText) => {
return responseText.exist_unique_column_data;
});
}
function username_api(resultApi) {
if (username.value != null) {
if (username.value.length < 8) {
username_alert.innerHTML = "Username is min 8 char & alphanumeric only. ";
} else {
if (!username.value.match(letterNumber)) {
username_alert.innerHTML = "Username is min 8 char & alphanumeric only. ";
} else {
if (!api('username', username.value)) {
username_alert.innerHTML = "";
} else {
username_alert.innerHTML = "Username has been taken. ";
}
}
}
} else {
username_alert.innerHTML = "Username is min 8 char & alphanumeric only. ";
}
}
根据 console.log,下面的变量将返回boolean.(true == username existed in db)。
响应文本.existence_unique_column_data。
然而,当我把这个函数包含在IF语句中,在 function username_api(resultApi){}。.if条件无法验证表达式是真还是假。
我在这里做错了什么?
最简单的方法是把if条件放在api函数中。
if (!responseText.exist_unique_column_data) {
username_alert.innerHTML = "";
} else {
username_alert.innerHTML = "Username has been taken. ";
}
但是,我不喜欢这种方式,因为如果我想在其他输入字段函数中调用相同的函数,它就不是模块化的。
async function api(column, value) {
const url = "<?php echo base_url(); ?>webapi/user/exist_unique_column_data";
let params = {
method: 'POST',
headers: new Headers({'Content-Type': 'application/x-www-form-urlencoded'}),
body: 'column_name=' + column + '&column_value=' + value + '&token=' + token
};
let response = await fetch(url, params);
return response.json();
}
function username_api(resultApi) {
if (username.value != null) {
if (username.value.length < 8) {
username_alert.innerHTML = "Username is min 8 char & alphanumeric only. ";
} else {
if (!username.value.match(letterNumber)) {
username_alert.innerHTML = "Username is min 8 char & alphanumeric only. ";
} else {
api('username', username.value).then(result => {
if(!result.exist_unique_column_data) {
username_alert.innerHTML = "";
} else {
username_alert.innerHTML = "Username has been taken. ";
}
})
}
}
} else {
username_alert.innerHTML = "Username is min 8 char & alphanumeric only. ";
}
}
谢谢Bergi的指点,我想我可以直接从fetch中获取返回值。