2

我在尝试使用带有 jQ​​uery Validation 的远程规则来验证我的字段时遇到了困难。它使 ajax 调用正常并传递正确的数据。Web 服务运行良好,并根据需要返回真或假。

我的问题在于该规则始终为负数。我不确定我是否以不正确的格式返回真/假。想法/想法?

这是我的规则:

$("[id$=txtOther]").rules("add", {
    remote: function () {
        return {
            type: "POST",
            url: $("[id$=hBaseURL]").val() + "Webservice/Validation.asmx/ValidateUser",
            data: JSON.stringify({ FullName: $("[id$=txtOther]").val(), UserID: $("[id$=txtOtherID]").val() }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            cache: false,
        };
        },

    messages: {
        remote: ""
    }
});

这就是我的网络服务的响应方式:

d       [Object {__type="Validation+Results", Status="true"}]
0       Object {__type="Validation+Results", Status="true"}
Status  "true"
__type  "Validation+Results"
4

2 回答 2

4

好吧,这就是我最终不得不做的事情来解决这个问题。首先,我接受了 Andrew 所说的话,并在那里发现了更多支持他所说的话。最有帮助的是这篇文章:

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

这篇文章基本上将这些行添加到我现有的代码中:

dataFilter: function (data) {
    var x = (JSON.parse(data)).d;
    return JSON.stringify(x); 
}  

问题仍然存在。我开始思考可能出了什么问题,并开始怀疑我的 Web 服务以及除了 .d 响应之外它是如何返回的。一段时间以来,我一直在使用此 Web 服务的不同修改,但由于某种原因,这个无法正常工作。在看了更多之后,我想到了它正在返回一个值列表,因为这是我在其他任何地方都需要的。我只返回了那个列表中的一个项目,但我想知道如果我只返回那个项目而不是列表会发生什么。我的网络服务现在返回了这个:

{"d":"true"}

这仍然不适用于我的原始代码,但现在我相当确定这是因为它以 d 的形式返回。我在另一个站点找到的 dataFilter 仍然不允许它工作,所以我稍微修改了 dataFilter 以仅返回纯文本,如下所示:

dataFilter: function (data) {
    var x = (JSON.parse(data)).d;
    return x;
}

最后我有一个可行的解决方案。在此过程中,我遇到了在验证失败后再次触发验证的问题,或者即使它出错也应该返回 true。那里有更多关于此的信息,由于这不是最初的问题,我不会深入讨论所有这些。一篇有用的帖子是: jquery 验证 - 远程方法在有效后不会触发但是,仅仅因为它们是如此相关,我使用此代码重置验证,即使最近真正有效的调用也允许再次触发验证。

$("[id$=txtOther]").removeData("previousValue");

我仍在使用此代码以及以下代码来按需触发验证:

var resetValid = $("[id$=txtOther]").valid();

这是我用于远程验证的最终代码:

 $("[id$=txtOther]").rules("add", {
    remote: function () {
        return {
            type: "POST",
            url: $("[id$=hBaseURL]").val() + "Webservice/Validation.asmx/ValidateUser",
            data: JSON.stringify({ FullName: $("[id$=txtOther]").val(), UserID: $("[id$=txtOtherID]").val() }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            cache: false,
            dataFilter: function (data) {
                var x = (JSON.parse(data)).d;
                return x;
            }
        };
    },
    messages: {
        remote: "Additional reviewers must be selected from available options"
    }
});
于 2012-09-25T12:11:37.080 回答
2

看起来您的网络服务正在返回 XML,而 javascript 正在期待 JSON。

您可以尝试更改服务的返回类型吗?

在第 975 行的验证器插件更改中

response = response

response = response.d 
于 2012-09-22T01:57:35.550 回答