object20Objectvalidation插件Flask
我正在尝试使用带有flask框架的Validation jQuery插件。 这是我的代码:
email: { required: true, email: true, remote: { url: $.getJSON($SCRIPT_ROOT + "/_check_mail"), } },
此请求应发送到服务器,以检查数据库中是否已存在邮件是或否:
@app.route('/_check_mail') def check_mail(): mail = request.args.get('email') check = database.check_mail(mail) return check
如果邮件不存在,则检查变量为“True”并保存字符串“此邮件已存在”如果邮件已存在。
但是,当我尝试将其发送到服务器时,我收到此错误消息:
- 请求url:http://0.0.0.0:5000 / [object%20Object]?email = arnoutaertgeerts%40gmail.com
- 请求方法:GET
- 状态代码:404 NOT FOUND
已经尝试过其他一些东西,但没有任何效果。 有任何想法吗?
我想我可以使用costum方法,但我需要做一个同步的AJAX请求…
我怀疑你是否设置了处理[object Object]
路由的处理程序。 😉
问题似乎是$SCRIPT_ROOT
实际上是某种JavaScript对象 – 确保传递给getJSON
的最终URL是一个字符串(指向正确的端点)。
validation您是否正在访问正确的端点后,您需要确保返回有效的JSON:
from flask import jsonify # additional code @app.route("/_check_mail") def check_mail(): # ... snip ... return jsonify(valid=check)
我设法修复它(现在是真的)
问题来自.getJSON方法。 这种方法是一种简短的方法
$.ajax({ dataType: "json", url: url, data: data, success: success });
实际上已经被validation插件的远程调用使用了!
所以我唯一要做的就是:
email: { required: true, email: true, remote: { url: "_check_mail", data: { email: function() { return $("#email").val(); } } } },
$ SCRIPT_ROOT可能未定义。 你必须自己明确定义它。
来自flask文档 :
编辑:
你的代码很神秘。 $ .getJSON是$ .ajax的快捷方式,只执行GET请求并接收json响应。 $ .getJSON返回javascript对象,而不是字符串。 你如何将你的请求发送到check_mail
?
示例代码将是:
$.ajax({ type : 'GET', data : { email : /* argument to be supplied into `mail` var of flask's `check_email` view */ }, url : $SCRIPT_ROOT + '/_check_email', })
使用messages
选项而不是尝试从远程响应中读取它。
$(document).ready(function() { $('#myform').validate({ rules: { email: { required: true, email: true, remote: $.getJSON($SCRIPT_ROOT + "/_check_mail") // make sure it just returns true or false } }, messages:{ email: { remote: "custom error message" } } }); });