从javascript fetch中返回布尔值

问题描述 投票:0回答:1
    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 &amp; alphanumeric only. ";
            } else {
                if (!username.value.match(letterNumber)) {
                    username_alert.innerHTML = "Username is min 8 char &amp; 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 &amp; 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. ";
       }

但是,我不喜欢这种方式,因为如果我想在其他输入字段函数中调用相同的函数,它就不是模块化的。

javascript
1个回答
0
投票
    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 &amp; alphanumeric only. ";
            } else {
                if (!username.value.match(letterNumber)) {
                    username_alert.innerHTML = "Username is min 8 char &amp; 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 &amp; alphanumeric only. ";
        }
    }

谢谢Bergi的指点,我想我可以直接从fetch中获取返回值。

© www.soinside.com 2019 - 2024. All rights reserved.