2

jQueryValidationでリモートルールを使用してフィールドを検証しようとすると問題が発生します。これは、ajax呼び出しを正常に行い、正しいデータを渡すことです。Webサービスは正常に動作しており、必要に応じてtrueまたはfalseを返します。

私の問題は、ルールが常に否定的なままであるということです。間違った形式でtrue/falseを返しているのかどうかわかりません。アイデア/考え?

これが私のルールです:

$("[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: ""
    }
});

そして、これが私のWebサービスの応答方法です。

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

2 に答える 2

4

さて、これは私が問題を解決するためにやらなければならなくなったことです。最初に私はアンドリューが言ったことを取り上げ、彼が言っていることをサポートするためにそこにもっと見つけました。最も役に立ったのはこの投稿でした:

jQuery検証プラグインの問題(リモート検証)

この投稿は基本的にこれらの行を私の既存のコードに追加しました:

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

問題はまだそこにありました。私は何が間違っているのかを考え始め、自分のWebサービスと、それが.d応答以外にどのように返されるのか疑問に思い始めました。私はしばらくの間、このWebサービスのさまざまな変更を使用していましたが、何らかの理由でこれは機能していませんでした。それをもう少し見てから、それが他のどこでも必要だったので、値のリストを返しているという事実について考えました。そのリストで1つのアイテムしか返さなかったのですが、リストではなくそのアイテムだけを返したらどうなるのだろうと思っていました。私のWebサービスはこれを返しました:

{"d":"true"}

これはまだ私の元のコードでは機能しませんでしたが、dとして返されるためであるとかなり確信しました。他のサイトで見つけたdataFilterはまだ機能していなかったので、dataFilterを少し変更して、次のようなプレーンテキストを返しました。

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

最後に、私は機能していた解決策を手に入れました。このプロセス中に、検証が失敗した後、検証を再度トリガーするか、エラーが発生したにもかかわらずtrueを返すという問題が発生しました。これについてはもっと多くの情報がありますが、それが最初の質問ではなかったので、私はそのすべてに立ち入ることはしません。役立つ投稿の1つは次のとおりです 。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

WebサービスがXMLを返し、JavaScriptがJSONを期待しているようです。

サービスの返品タイプを変更してみてください。

975行目のバリデータープラグインの変更

response = response

response = response.d 
于 2012-09-22T01:57:35.550 に答える