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 验证插件的问题(远程验证)的主要内容,如果未能解决你的问题,请参考以下文章

使用带有“远程”选项的 jQuery 验证插件

jQuery远程验证竞争条件

使用远程方法对 emailId 和电话号码进行 Jquery 验证

jQuery插件总结

jQuery 表单验证插件:要求电子邮件为 .EDU 地址

jquery的表单验证插件怎么验证身份证号