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" } } }); });