首页 > 解决方案 > 使用 Javascript 检查 $.get 的返回值

问题描述

防止通过 POST 提交表单,并在满足条件后提交。正在提交表单,我不确定如何检查该函数(它将 HTML 输入传递到 Python 以检查用户是否存在(如果不存在则以 JSON 格式返回 true,如果存在则返回 false)。

我试过检查函数是否为真,这在大多数情况下都有效,我想知道 $.get 是否是一个奇怪的情况?

document.getElementById("register").addEventListener("click", function(event) {
        event.preventDefault();

        let input = document.getElementsByName("username");
        function(check) {
            $.get('/check?username=' + input.value, function(data) {
                document.querySelector('ul').innerHTML = data;
            })
        if (check()) {
                this.submit();
            }
        else {
            alert ("username is taken!");
            return false;
        }


@app.route("/check", methods=["GET"])
def check():
    # Check the http parameter for username.
    username = request.args.get("username")

    check = db.execute("SELECT username FROM users WHERE username = :username", username=username)

    if not check:
        return jsonify(True)
    else:
        return jsonify(False)

我希望警报闪烁并阻止函数的表单提交运行并返回 json(False) - 这表明用户名已被使用

但现在它正在提交表单。

标签: javascriptjqueryjson

解决方案


$.get()是异步的,所以你不能从check()

$.get()如果响应为真,则改为在回调中提交

document.getElementById("register").addEventListener("click", function(event) {
  event.preventDefault();
  let input = document.getElementsByName("username")[0];

  $.getJSON('/check?username=' + input.value, function(data) {
    if (data) {
      document.querySelector('**formSelector**').submit()
    } else {
      // notify user
    }
  });

})

推荐阅读