Сообщения проверки JQuery от XML - PullRequest
0 голосов
/ 06 октября 2010

Я использую плагин Jquery valdiation для проверки формы на стороне клиента.Я получаю сообщения об ошибках проверки из xml-файла.

$("#"+form).validate({
    errorLabelContainer: "#dialogError", //msg_error
    wrapper: "li",
    rules: {
        txtInfringementID: {
            required: true,
            digits: true
        },
        txtLicenceNumber: {
            required: true            
        },
        txtDateOfOffence: {
            date: true,
            required: true
        }
    },
    messages: {
        txtInfringementID: {
            required:this.errorMessage("InfringementID","Required"),
            digits: "Inf Id must be numeric only"
        },
        txtDateOfOffence: {
            required: "please enter date of offence",
            date: "Date is not valid"
        },
        txtLicenceNumber:this.errorMessage("LicenceNumber", "Required"),
        txtSurname: this.errorMessage("DebtorSurname", "Required")
    }
)};

Функция errorMessage находится ниже.

this.errorMessage = function (Field, Rule) {

    var message;
    $.ajax({
        type: "GET",
        url: "../../../ErrorMessages.xml",
        dataType: "xml",
        success: function (xml) {

            $(xml).find("*[Name='" + Field + "']").each(function () {
                message = $(this).find(Rule).text();
            });
        }
    });

    return message; **//I am using a debugger here**
}

, и я использую xml

<?xml version="1.0" encoding="utf-8" ?>
<ErrorMessage>
    <Field Name="InfringementID">
        <Required>Infringement ID is required</Required>
        <Digit>Infringement ID should be numeric only</Digit>
    </Field>
    <Field Name="LicenceNumber">
        <Required>License Number is Mandatory</Required>
    </Field>
    <Field Name="DebtorSurname">
        <Required>Debtor Surname is Mandatory</Required>
    </Field>
</ErrorMessage>

Но проблема в том, что когда я использую отладчик, я получаю сообщения из XML.Если я не использую отладчик, я получаю сообщение по умолчанию «это поле обязательно для заполнения».Я думаю, проблема в this.errorMessage() - это асинхронный запрос, и этот запрос занимает некоторое время.Я попытался установить некоторую задержку с помощью функции setTimeout .но я не знаю, где поставить задержку.Любой мыслительный процесс приветствуется.

Я устанавливаю таймаут следующим образом.

required:setTimeout(this.errorMessage("InfringementID","Required"),10000),

1 Ответ

0 голосов
/ 06 октября 2010

errorMessage запускает ajax-вызов и сразу после этого возвращается, не дожидаясь ответа.Из-за этого message будет null все время.Ваш подход с setTimeout только задерживает вызов errorMessage.Результат будет такой же как и без него.Сделайте ваш ajax-вызов синхронным и тем самым дождитесь его результата.

$.ajax({
    type: "GET",
    async: false,     // wait for the response
    url: "../../../ErrorMessages.xml",
    dataType: "xml",
    success: function (xml) {
        $(xml).find("*[Name='" + Field + "']").each(function () {
            message = $(this).find(Rule).text();
        });
    }
});

Редактировать Я точно не знаю, о чем вы просите, но я дамэто попытка ... Из-за последней строки вашего вопроса выше, возможно, следующая часть сделает это за вас

required: function() {
    setTimeout(this.errorMessage("InfringementID", "Required"), 10000);
}
...