Плагин JQuery Validation: проблема с удаленным методом - PullRequest
2 голосов
/ 03 июля 2010

Я использую удаленный метод управления проверкой jquery, чтобы проверить, существует ли адрес электронной почты в базе данных.Все работает отлично с первого раза запуска проверки.Однако при последующей проверке данные, передаваемые веб-службе, являются старыми данными, а не новыми данными, введенными в текстовое поле.

* Например, адрес электронной почты вводится в текстовое поле электронной почты, запускается проверка, результаткак и ожидалось.Адрес электронной почты изменяется, проверка запускается снова, но при проверке FireBug ajax-данные - это старые данные, а не новые.

Таким образом, следующие данные всегда передаются независимо от того, что находится в текстовом поле.{'email': 'test@test.com'casts

например. Это настройки правила.

rules: {
        <%=txtGuestEmail.UniqueID%>: {
            email: true,
            remote: {
                type: 'POST',
                contentType: 'application/json; charset=utf-8',
                cache: false,
                async: false,
                url: 'ajaxCheckout1.asmx/IsEmailAvailable',
                // Use data filter to strip .d explained here http://encosia.com/2009/06/29/never-worry-about-asp-net-ajaxs-d-again/
                dataFilter: function(data) {
                    var msg = eval('(' + data + ')');
                    // If the response has a ".d" top-level property, return what's below that instead.
                    if (msg.hasOwnProperty('d'))
                        return msg.d;
                    else
                        return msg;
                },
                dataType: 'json',
                data: "{'email':'" + $('#ctl00_PageContent_txtGuestEmail').val() + "'}"
            }
        },

Ответы [ 2 ]

4 голосов
/ 03 июля 2010

Причина, по которой это происходит, заключается в том, что значение поля электронной почты фиксируется при загрузке страницы и больше не обновляется. Решением было бы добавить удаленное правило в это поле отдельно:

$('#myform').validate(
{
    ...
});

$('#ctl00_PageContent_txtGuestEmail').rules('add', {
    remote: function () {
        return {
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            url: 'ajaxCheckout1.asmx/IsEmailAvailable',
            dataFilter: function(data) {
                var msg = eval('(' + data + ')');
                if (msg.hasOwnProperty('d'))
                    return msg.d;
                else
                    return msg;
            },
            dataType: 'json',
            data: "{'email':'" + $('#ctl00_PageContent_txtGuestEmail').val() + "'}"
        };
    }
});
0 голосов
/ 03 июля 2010

Вот окончательный код с небольшой очисткой.

$('input[name=<%=txtGuestEmail.UniqueID%>]').rules('add', {
    remote: function () {
        return {
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            url: 'ajaxCheckout1.asmx/IsEmailAvailable',
            dataFilter: function(data) {
                var msg = eval('(' + data + ')');
                if (msg.hasOwnProperty('d'))
                    return msg.d;
                else
                    return msg;
            },
            dataType: 'json',
            data: "{'email':'" + $('input[name=<%=txtGuestEmail.UniqueID%>]').val() + "'}"
        };
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...