Parsley 远程和服务器端验证(无法从 json 对象获取内容)

Posted

技术标签:

【中文标题】Parsley 远程和服务器端验证(无法从 json 对象获取内容)【英文标题】:Parsley Remote and Server Side Validation (can't get content from json object) 【发布时间】:2015-12-27 09:16:27 【问题描述】:

我正在尝试验证我们的数据库中是否已经存在电子邮件。我总是从 Ajax 请求中获得 200 状态代码,但我得到的请求正文看起来像这样。如果该电子邮件不存在且可用,则结果 =1(表单应返回 true),如果该电子邮件已存在于数据库中,则结果 = 0(发件人应返回 false 且未验证)。但是我一直在控制台中获取未定义的数据。好像我不知道如何将json对象传递给函数。

我会买啤酒给任何能帮我解决这个问题的人。谢谢。

JSON 响应

id: "1c29da8e-ca94-4ea4-a69f-f0af15f54bf5", redirectPage: "/public/actionStatus.jsp", errorText: "",…
action: "/check.douserEmailAvailable"
data: 
errorCode: ""
errorText: ""
id: "1c29da8e-ca94-4ea4-a69f-f0af15f54bf5"
redirectPage: "/public/actionStatus.jsp"
result: "1"
text1: ""
text2: ""
text3: ""
text4: ""
text5: ""

JQUERY 和 HTML

$(document).ready(function()
	window.Parsley.addAsyncValidator('mycustom', function (data) 
		if (data.result == 1) 
            console.log("does not exist");
            return true;
           else 
            console.log("already exist");
            return false;
          
	  , '/check.do?action=userEmailAvailable&ajax=1');
	
	
	$('#userReg').parsley();
);
			<input type="email" name="userEmail1" data-parsley-remote data-parsley-remote-options=' "type": "POST", "data":  "token": "value"  ' data-parsley-remote-validator='mycustom' id="userEmail1" value="" required />

【问题讨论】:

【参考方案1】:

传递给异步验证器的第一个参数是xhr,而不是data

您可以使用$.parseJSON(xhr.responseText)xhr.done(function(json)...) 等...来做您想做的事情。

【讨论】:

【参考方案2】:

搞定了,如果以后有人遇到问题。

$(document).ready(function()
	window.Parsley.addAsyncValidator('emailvalidation', function (data) 
		var myResponseText = data.responseText;
		var obj = jQuery.parseJSON(myResponseText);		
		if (obj.result == 1) 
            return true;
           else 
            return false;
          
	  , '/check.do?action=userEmailAvailable&ajax=1');
	
	
	$('#userReg').parsley().on('form:success', function() 
		
		var formData = $("#userReg").serializeArray();
	  	var action = "<%=pdo.getRegistrationData().registrationType.toString()%>";
	    
	    $.post("/userRegistration.do?action="+ action +"&ajax=1", formData, 
		    	function(data) 
		    		window.location.href = data.redirectPage;
		      );
	);
	
	
);

【讨论】:

以上是关于Parsley 远程和服务器端验证(无法从 json 对象获取内容)的主要内容,如果未能解决你的问题,请参考以下文章

Parsley 验证不等待远程验证 AsyncValidate 完成

在 Rails 4 中正确实现 Parsley.js 自定义远程验证器

即使 Parsley 验证失败,.submit() 也会始终执行

使用 jquery.inputmask 插件进行 parsley.js 验证

Parsley 在页面上没有的字段上引发错误

使用 parsley js 进行表单验证。字母数字和密码确认