Проблема с плагином проверки JQuery (удаленная проверка) - PullRequest
4 голосов
/ 09 августа 2011

У меня проблема при попытке проверить пользовательское значение с помощью плагина jQuery Validation .

Проверка правильности запускается корректно и вызывает функцию веб-службы точно так, как я хочу, но даже если серверная функция работает правильно и возвращает результат 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;
    }
}

1 Ответ

7 голосов
/ 09 августа 2011

Проблема в том, что вместо

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); 
        }  
    };   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...