使用symfony 2 url路由的jQuery验证远程

时间:2013-09-09 11:39:05

标签: jquery jquery-validate

我正在使用jQuery Validate plugin

重写一些javascript验证

发生的一个问题是使用检查用户名是否有效的函数。 它通过发送包含用户名的ajax调用来完成此操作。

请求网址必须如下所示:

  

/ AJAX /签的用户名/ usernamehere

当前功能:

var checkUsername = function(value){
    var username = false;
    jQuery.ajax({
        url: "/ajax/check-username/" + encodeURI(value)
    }).done(function (data) {
        if (data.exists) {
            username = false;
        } else {
            username = true;
        }
    });
    return username;
}

jQuery Validate请求路径如下所示:

  

/ AJAX /签的用户名/?用户名= usernamehere

jQuery验证:

jQuery('#user').validate({
    rules: {
        username: {
            required: true,
            minlength: 6,
            remote: {
                url: '/ajax/check-username/'
            }
        }
    }
});

如何让远程方法使用我当前的网址?

1 个答案:

答案 0 :(得分:0)

您的原始JavaScript函数正在查看数据是否存在。

if (data.exists) {
    username = false;
} else {
    username = true;
}

但是,as per documentation for the remote rule,您需要从服务器脚本返回true才能通过验证。几乎任何其他响应都会触发验证错误消息。

  

“对于有效元素,响应评估为JSON,必须true,可以是falseundefinednull对于无效元素,使用默认消息;或者字符串,例如'该名称已被采用,请尝试使用peter123'以显示为错误消息。“

您最好的解决方案是在/ajax/check-username/修改服务器脚本,以便在没有数据时返回true;或者false或者你想要的错误信息。


引用OP:

  

“如何让远程方法使用我当前的网址路由?”

简短的回答:你没有。

远程方法使用以下默认设置将数据作为JSON dataType发送到您的服务器脚本...

dataType: "json",
data: { nameOfTheElement: valueOfTheElement }

因此,您可以修改服务器脚本以简单地接受此JSON格式的传入数据。

否则,您可以在声明时更改remote设置。

采取from the docs的例子:

rules: {
    username: {
        required: true,
        minlength: 6,
        remote: {
            url: "/ajax/check-username/",
            type: "post",
            data: {
                username: function() {
                    return $( "#username" ).val();
                }
            }
        }
    }
}