jQuery 验证插件的问题(远程验证)
Posted
技术标签:
【中文标题】jQuery 验证插件的问题(远程验证)【英文标题】:Problem with jQuery validate plugin (remote validation) 【发布时间】:2011-10-23 08:40:57 【问题描述】:我在尝试使用 jQuery Validation plugin 验证用户值时遇到问题。
验证似乎正确触发并完全按照我的意愿调用 Web 服务函数,但即使服务器函数正常工作并返回 true
/false
结果,该字段始终无效。
这是客户端的验证码
$('#myForm').validate(
errorContainer: container,
errorLabelContainer: $("ol", container),
wrapper: 'li',
meta: "validate",
rules:
Code: required: true, maxlength: 15, remote: function ()
return
type: "POST",
url: GetBaseWSUrl() + 'MyService.asmx/IsValidCode',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify( umltCode: $('#Code').val() )
,
Description: required: true, maxlength: 255 ,
Notes: maxlength: 255
,
messages:
// ... omitted for brevity
,
submitHandler: function (form)
saveObject(form);
);
使用 fiddler 我可以看到对服务器进行了调用,并且服务器正在返回一个 json true
/false
值,具体取决于以下示例中的情况:
"d":false
或
"d":true
尽管如此,插件仍然将该字段标记为无效。有什么建议吗?
编辑:这是我的服务器功能
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class MyService : System.Web.Services.WebService
[WebMethod]
public object IsValidCode(string umltCode)
[...]
if (u != null)
return false;
return true;
【问题讨论】:
我认为,remote
函数应该返回 true 或 false,而是返回一个对象 d: true
。
【参考方案1】:
问题在于,而不是
true
您的网络服务返回
"d":true
d
属性应该被移除。
ASMX 被认为是遗留的,所以我会首先摆脱它。但在此之前,您还可以使用 dataFilter
属性,如下所示:
remote: function()
return
type: "POST",
url: GetBaseWSUrl() + 'MyService.asmx/IsValidCode',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify( umltCode: $('#Code').val() ),
dataFilter: function (data)
var x = (JSON.parse(data)).d;
return JSON.stringify(x);
;
【讨论】:
您能否建议如何为asmx
服务执行此操作?我认为这就是 bool
类型答案是 JSON 序列化的方式。
@Zruty,ASMX 被认为是遗留技术。我不会打扰它。如果我必须调用这样的服务,我会围绕它编写一个服务器端包装器,以便完全控制输出。
@Darin Dimitrov:感谢您的回答。我怎样才能删除它?我已经编辑了我的问题以添加服务器功能原型。我有一个 asmx 网络服务.... :(
@Lorenzo,您可以将其替换为 WCF Web 服务,或者您将编写一个自定义 HTTP 处理程序,该处理程序在内部调用该服务并返回格式正确的结果。或者简单地使用服务器端 HTTP 处理程序 .ASHX 来执行验证。
@Darin Dimitrov:我不得不稍微修改您的答案,因为该函数需要一个 json 真实值,但您的方法是正确的。非常感谢!以上是关于jQuery 验证插件的问题(远程验证)的主要内容,如果未能解决你的问题,请参考以下文章