【发布时间】:2021-04-21 12:04:43
【问题描述】:
以下代码中的$.get 返回一个名为data 的JSON 格式的布尔值。但是无论data 的值是false 还是true preventDefault() 都会阻止表单的提交。
$(document).ready(function() {
$("#username").blur(function() {
let username = document.getElementById("username").value;
$.get("/check", {
username_value: username
}, function(data) {
alert(data);
$("#submit").click(function(e) {
if (data) {
e.preventDefault();
} else if (!data) {
e.submit();
}
});
});
});
});
这是 /check 部分
@app.route("/check", methods=["GET"])
def check():
"""Return true if username available, else false, in JSON format"""
get_username = request.args.get("username_value")
users = db.execute("SELECT username FROM users")
lenght = len(get_username)
i = 0
for user in users:
if get_username == users[i]["username"] or not lenght > 1:
return jsonify(True)
i += 1
return jsonify(False)
顺便说一句,我是编码业务的新手。感谢您的帮助。
【问题讨论】:
-
alert(data)看起来像什么?我打赌它是字符串或其他东西而不是布尔值 -
data将是一个字符串,因此除非它为空,否则它将始终强制为真值,但是您将返回'true'或'false',因此情况并非如此。我强烈建议您返回结构化数据格式,例如 JSON,以避免此问题并使用布尔值作为值。另外e.submit()将导致错误,因为该事件没有submit方法。else可以完全删除。 -
我认为数据部分正在工作,因为当我将
e.preventDefault();和e.submit();更改为alert(data);时,它会显示我想看到的消息:真或假 -
对,但它们将是字符串,而不是布尔值,并且类型强制将意味着
'true'和'false'=true。这就是为什么使用alert()进行调试不是好的做法。请改用console.log(),并使用结构化类型的布尔值作为 AJAX 调用的响应。 -
原来
data一直是一个布尔值。刚刚用typeof检查它并返回布尔值作为结果。还有其他想法吗?感谢您的建议顺便说一句:)
标签: javascript jquery preventdefault