Использование $ .get с проверкой jquery - PullRequest
0 голосов
/ 12 марта 2010

Я пытаюсь использовать встроенный валидатор Jquery на моей странице. Проблема в том, что у меня есть определенные поля, которые обязательны для заполнения, только если JobID (введенный в другое поле) еще не существует в нашей базе данных. У меня есть простой сервис, который просто принимает JobID и возвращает True или False в зависимости от того, существует ли JobID, но я не могу получить эту информацию там, где я хочу. Пример кода:

$("#dep_form").validate({
        rules: {
            JobID: {
                required: true,
                digits: true,
                minlength: 3
            },
            OrgName: {
                required: function(element) { //This field is required if the JobID is new.
                    return $("#jobinfo").html().length==15; }
            }
        },
        messages: {
            JobID: {
                required: "Enter a Job Number.",
                digits: "Only numbers are allowed in Job ID's.",
                minlength: "Job Number must be at least 3 digits"
            },
            OrgName: {
                required: "Select a Practice from the dropdown list."
            }
        },
        errorClass: "ui-state-error-input",
    errorLabelContainer: "#errorbox",
    errorElement: 'li',
    errorContainer: "#validation_errors",
    onfocusout: false,
    onkeyup: false,
    focusinvalid: false
};

В настоящее время я использую ленивый метод для проверки (показано выше). Однако теперь у меня есть доступ к сервису по URL:

var lookupurl = "/deposits/jobidvalidate/?q=" + $("#id_JobID").val() + "&t=" + new Date().getTime();

- это страница, которая будет содержать только слово True или False в зависимости от того, существует ли данный JobID. Я пробовал полдюжины различных способов установки переменных и вызова функций внутри функций, и до сих пор не могу найти способ просто вернуть значение этой страницы (к которому я пытался получить доступ с помощью $ .get ()) в мой валидатор , таким образом, обязательный параметр имеет значение true, если задание не существует, и false, если задание уже существует. Какие-либо предложения? Спасибо.

Ответы [ 3 ]

1 голос
/ 12 марта 2010

Похоже, вы используете асинхронный Ajax-запрос ($.get). Я думаю, ваш код выглядит примерно так:

var result;

$.ajax({
    url: lookupurl,
    success: function() { result = /* parse the response here */; },
    dataType: 'html'
});

return result;

Но это не сработает, потому что result будет возвращено до срабатывания обратного вызова success (и при этом установите значение result). Если мое предположение верно, то вам нужно сделать $get синхронным, но вы должны использовать $.ajax для этого.

Редактировать @Pointy: $.get, в соответствии с API , сокращение от

$.ajax({
    url: url,
    data: data,
    success: success,
    dataType: dataType
});

... который по умолчанию является асинхронным.

0 голосов
/ 12 марта 2010

Это действительно была проблема синхронизации / асинхронности. Я смог решить это с помощью:

var lookupurl = "/deposits/jobidvalidate/?q=" + $("#id_JobID").val() + "&t=" + new Date().getTime();
var result;
$.ajax({
    url: lookupurl,
    success: function(data) { result = data;},
    dataType: 'html',
    async: false
});
return result;
0 голосов
/ 12 марта 2010

Вы должны быть в состоянии получить результат "get" в качестве параметра для обратного вызова, который вы передаете.

var jobIdExists;
$.get(url, function(data) { jobIdExists = data =="True"; });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...