В нашем веб-приложении мы хотим обработать значение определенного текстового поля с помощью вызова ajax, как только будет нажата определенная кнопка:
$("#the-button").click(function() {
if ($("#the-form").validate().element($("the-button"))) {
var oldValue = $("#the-button").value(),
newValue = process(oldValue);
}
});
Метод process()
скрывает ajax-вызов synchronous
для извлечения некоторого значения на основе текста в текстовом поле.
Перед выполнением process () мы проверяем поле с помощью специального адаптера, который использует тот же вызов ajax, просто чтобы узнать, способен ли сервер обработать значение. (Это по причине.)
Теперь мы хотели бы оптимизировать это: в основном запись действительна тогда и только тогда, когда она может быть обработана :
$.validator.addMethod("canBeProcessed", function(value, element) {
var result;
$.ajax({
...,
async: false,
success: function (data) {
result = true;
// the actual result is ignored
}
error: function () {
result = false;
}
}
return result;
}, "Value cannot be processed");
Так что было бы неплохо, если бы мы могли проверить и обработать значение за один раз:
$.validator.addMethod("canBeProcessed", function(value, element) {
var result;
$.ajax({
...,
async: false,
success: function (data) {
result = true;
saveForLaterUse(data); // <-- save the result
}
error: function () {
result = false;
}
}
return result;
}, "Value cannot be processed");
Как вы предлагаете решить эту проблему? Мы не хотим хранить значение в какой-либо жестко закодированной глобальной переменной. Его следует извлечь из текстового поля, чтобы можно было применить правило проверки, даже если значение результата не понадобится.