尝试使用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;
}
}
答案 0 :(得分:7)
问题在于,而不是
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);
}
};
}