0

我正在尝试将 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”,如果邮件已经存在,则保存字符串“This mail already exists”。

但是,当我尝试将其发送到服务器时,我收到此错误消息:

  • 请求网址:http://0.0.0.0:5000/[object%20Object]?email=arnoutaertgeerts%40gmail.com
  • 请求方法:GET
  • 状态码:404 未找到

已经尝试了一些其他的东西,但没有任何效果。有任何想法吗?

我想我可以使用 costum 方法使它工作,但是我需要做一个同步的 AJAX 请求......

4

4 回答 4

2

我怀疑您是否设置了处理程序来处理[object Object]路线。;-)

问题似乎在于$SCRIPT_ROOT它实际上是某种 JavaScript 对象 - 确保您传递给的最终 URLgetJSON是一个字符串(指向正确的端点)。

在您确认您点击了正确的端点后,您需要确保您返回的是有效的 JSON:

from flask import jsonify

# additional code

@app.route("/_check_mail")
def check_mail():
    # ... snip ...
    return jsonify(valid=check)
于 2013-03-15T22:41:18.830 回答
1

$SCRIPT_ROOT 可能未定义。您必须自己明确定义它。

来自烧瓶文档

<script type=text/javascript>
  $SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
</script>

编辑 :

你的代码很神秘。$.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',
})
于 2013-03-16T06:33:13.433 回答
1

我设法修复它(现在是真实的)

问题来自 .getJSON 方法。这个方法是一个简短的方法

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

验证插件的远程调用实际上已经在使用它!

所以我唯一需要做的就是:

email: {
    required: true,
    email: true,
    remote: {
        url: "_check_mail",
        data: {
            email: function() {
                return $("#email").val();
                }
            }
         }
    },
于 2013-03-16T11:09:42.993 回答
0

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

});
于 2013-03-15T21:41:53.093 回答