Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery验证插件问题(远程验证)_Jquery_Asp.net_Web Services_Jquery Validate - Fatal编程技术网

jQuery验证插件问题(远程验证)

jQuery验证插件问题(远程验证),jquery,asp.net,web-services,jquery-validate,Jquery,Asp.net,Web Services,Jquery Validate,我在尝试使用验证用户值时遇到问题 验证似乎正确启动并完全按照我的要求调用web服务函数,但是,即使服务器函数工作正常并返回true/false结果,该字段始终无效 这是客户端的验证代码 $('#myForm').validate({ errorContainer: container, errorLabelContainer: $("ol", container), wrapper: 'li', meta: "validate", rules: {

我在尝试使用验证用户值时遇到问题

验证似乎正确启动并完全按照我的要求调用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}

尽管如此,插件仍然将该字段标记为无效。有什么建议吗

编辑:这是我的服务器功能

[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;
    }
}

问题是

true
您的web服务返回

{"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); 
        }  
    };   
}

我认为,
remote
函数应该返回true或false,并返回一个对象
{d:true}
。对于
asmx
服务,您能建议如何执行此操作吗?我想这就是
bool
类型的答案是如何JSON序列化的。@Zruty,ASMX被认为是遗留技术。我不想为此费心。如果我必须调用这样的服务,我会在它周围写一个服务器端包装,以便完全控制输出。@Darin Dimitrov:谢谢你的回答。我怎样才能去掉它?我已经编辑了我的问题,添加了服务器功能原型。我有一个asmx网络服务(@Lorenzo,您可以将其替换为WCF web服务,或者您可以编写一个自定义HTTP处理程序,在内部调用该服务并返回正确格式的结果。或者只需使用服务器端HTTP处理程序.ASHX来执行验证。@Darin Dimitrov:我必须稍微修改您的答案,因为该函数需要json真的很有价值,但你走的路是对的。非常感谢!
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); 
        }  
    };   
}