我正在使用jQuery Validation plugin(JVP)通过ajax执行服务器端验证。一切都很好,除了一件事:JVP无法执行空白字段的远程验证。
我不介意将其默认规则required: true
用于具有简单状态验证的属性。但有时我的模型中有复杂的逻辑,我想将它保留在服务器端。
所以问题:我无法通过他的内置远程ajax方法强制JVP验证空白字段。但我可以在他的required
方法中使用函数(结果应该为true或false):
required: function(element) {
return true_or_false;
}
所以我决定在这个函数中使用async ajax请求,但我无法从async ajax调用返回值。我尝试使用回调,但无法使其工作,我坚持这个问题。这是我的代码(CoffeeScript):
validate_url = '/emails/validate'
required_validate = (e, callback) ->
data = {}
data[e.name] = $(e).val()
$.ajax(
url: validate_url
type: 'post'
dataType: 'json'
data: data
success: (response) ->
callback(response)
)
$('#my_form').validate(
rules:
'email[email]':
required: (element) ->
required_validate(element, (response) ->
if response == true || response == "true"
false
else
true
)
)
我检查了所有数据,进入服务器及其响应 - 没关系。
JVP的required
方法不等待响应并且始终获得true
的问题。如何从success
ajax请求中返回值?
答案 0 :(得分:0)
不要编写自己的异步验证方法,而是尝试使用remote
方法。
文档为here。
另外,请参阅此other SO question。
这些方面的东西(对不起,我的CoffeeScript有点生锈)。您可能需要稍微调整data
选项以使其正确,但我认为这是您需要做的一般概念。
$('#my_form').validate(
rules:
'email[email]':
remote:
url: validate_url,
type: "post",
data:
email: () ->
$(".email_container").val()
)