当前位置: 首页 > 知识库问答 >
问题:

使用jQuery检查数据库中的用户名

徐君植
2023-03-14

TL; DR=

我正在尝试调用一个名为“check”的函数,该函数将检查所填写的用户名是否为空,以及我的数据库中是否已经存在该用户名。此检查函数如下所示:

@app.route("/check", methods=["GET"])
def check():
    """Return true if username available, else false, in JSON format"""
    # User reached route via POST (as by submitting a form via POST)

    if request.method == "GET":

    username = request.args.get("username")

    usernames = db.execute("SELECT * FROM users")[0][username]

    if username is not None and len(username) > 1:
        if username not in usernames:
            return jsonify(True)
        else:
            return jsonify(False)
    else:
        return jsonify(False)

我不知道这段代码是否正常工作,但我想我能做到。问题是我对jQuery缺乏经验。首先,我有一个相当简单的超文本标记语言代码来设置注册页面:

    <form action="/register" method="post">
        <div class="form-group">
            <input autocomplete="off" autofocus class="form-control" name="username" placeholder="Username" type="text">
        </div>
        <div class="form-group">
            <input class="form-control" name="password" placeholder="Password" type="password">
        </div>
        <div class="form-group">
            <input class="form-control" name="confirmation" placeholder="Password" type="password">
        </div>
        <button class="btn btn-primary" type="submit">Register</button>
    </form>
{% endblock %}

现在,我想在尝试提交表单时使用jQuery来调用它,以便检查用户名是否已经存在。如果没有,则check函数应以JSON格式返回“true”。之后应提交表格。如果它已经存在,我想发送一条警告消息,说“这个用户名已经被使用”,我想阻止提交表单。这是我在jQuery中的尝试,有人能告诉我它有什么问题吗?

{% block main %}
<script>
    let input document.querySelector('username');
    document.querySelector('form').onsubmit = function(event) {
        $.get('/check?username=' input.value, function(data)
            if data == False:
            alert("This username is already taken");
            event.preventDefault();
    }
</script>

谢谢!

共有2个答案

习洲
2023-03-14

你的代码肯定会给出很多错误...当你使用jQuery时,你可以像这样提交表单

$('form').on('submit' , function(e){
  e.preventDefault();  // use it outside `$.get` not inside it
  console.log($('input[name="username"]').val()); // get the username value
  console.log($(this).serialize()); // get form serialize data
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form action="/register" method="post">
    <div class="form-group">
        <input autocomplete="off" autofocus class="form-control" name="username" placeholder="Username" type="text">
    </div>
    <div class="form-group">
        <input class="form-control" name="password" placeholder="Password" type="password">
    </div>
    <div class="form-group">
        <input class="form-control" name="confirmation" placeholder="Password" type="password">
    </div>
    <button class="btn btn-primary" type="submit">Register</button>
</form>aA
戚鸿
2023-03-14

您的Javascript包含许多错误。

首先,让输入document.query选择器(用户名)缺少一个等号,这在进行变量赋值时是必要的。除此之外,您的查询选择器是不正确的,因为它正在寻找用户名元素(不存在)。您应该在DOM中查询具有name属性设置为"username"的控件类的输入元素;查询选择器将是'input.form-control[name="username"]'。这一行应该是:

let input = document.querySelector('input.form-control[name="username"]');

请参见document.query选择器。

其次,您编写了$.get('/check?username='input.value,这是不正确的;如果您要连接两个字符串,则应使用运算符。该部分代码应重写为:

$.get('/check?username=' + input.value

第三,对于jQuery.get的回调函数,当函数表达式需要大括号时,您编写了函数(数据)[code here]。正确的代码是:

 function(data){   
  //code here
 }

第四,你写了if data==False:.ifJavascript中的语句在括号中有条件,在大括号中有代码执行。应正确写成:

if(data === false){
  //do something
}

最后,在调用jQuery的$. get时,您忘记了结束括号。函数应该在函数名后面用一个开始括号和一个结束括号来调用——即,函数名(/*参数在这里*/)。你写的

$.get(/*<-this bracket is never closed*/ '/check?username=' input.value, function(data)
            if data == False:
            alert("This username is already taken");
            event.preventDefault();

正确的代码是:

$.get('/check?username=' + input.value, function(data){
     //do stuff
});

更正代码:

let input = document.querySelector('input.form-control[name="username"]');
document.querySelector('form').onsubmit = function(event) {
   $.get('/check?username=' + input.value, function(data){
         if(data === false){
            alert("This username is already taken");
            event.preventDefault();
         }
   });
}

我建议你在尝试编写Javascript之前先阅读Javascript教程。此外,调试时应始终检查控制台(Ctrl Shift I),因为控制台将向您指示任何语法错误(或其他错误)及其发生的行。

 类似资料:
  • 问题内容: 因此,基本上,我想在注册表格中添加一个功能,该功能将检查数据库中是否已存在该用户名。 我对AJAX有几个问题- 1)我想创建一个AJAX请求on_change函数,所以像这样- 因此,据我所知,我必须在validation.php文件中包含所有在PHP中进行的验证,对吗?是否需要任何特殊的验证,或者只是使用sql语句进行的简单验证- 2)据我所知,我也必须通过$ .ajax传递POST

  • 我已经在谷歌上搜索了两个星期了,没有任何效果。我只想知道如何检查给定的用户名是否存在于我的MySQL数据库表中。表名为用户。但是它似乎绕过了我的if语句,直接添加用户名,导致我的表有相同用户名的重复。我试过很多代码,也试过很多方法。一直在使用MySQL,因为这是我们现在应该使用的。我可以给你我尝试过的任何方法,但这是我第100次尝试的最新方法。请注意,我知道这还没有完全准备好抵御SQL注射,我现在

  • 问题内容: 有没有一种方法可以检测当前用户是否正在使用jQuery / JavaScript使用iPad? 问题答案: iPad检测 通过查看属性,您应该能够检测到iPad用户: iPhone / iPod检测 同样,用于检查iPhone或iPods等设备的属性:

  • 问题内容: 无法让Firebase识别已经输入的用户名。下面的代码显示我正在尝试将输入的用户名与数据库的DataSnapshot进行比较。该代码似乎没有拾取输入的用户名。代码是否错误? 在按钮上单击,我希望能够将用户引导到该错误,并且在该错误唯一之前,不应将该页面推送到下一个活动。 JSON树(如果有帮助) 问题答案: 是异步操作。设置回调后,代码将继续运行,而您尚未获取任何用户名。到您检查mSw

  • 我正在尝试使用Angular检索嵌套Firestore数据库中所有用户的数据。数据库看起来如下所示:用户(id)->posts(id)-{description:这是一个图像,image:imageURL}。

  • 我目前正在安装Firebase应用程序,并能够检索使用该应用程序的所有用户的列表。当用户首次注册该应用程序时,他们需要确认自己的电话号码,就像现在大多数iOS应用程序一样。我正在“用户”节点中存储他们的电话号码。我的问题是如何在Firebase中查询以查看该电话号码是否存在于我的数据库中?基本上,我想根据我生成的电话号码列表和所有联系人列表进行查询 这将允许我显示特定联系人当前是否正在使用该应用程