Buduję walidacji formularza i nauczyć obietnice I zdecydowała się na wdrożenie asynchronicznych funkcji sprawdzania poprawności za pomocą obietnica wzór:Abort ajax żądanie w obietnicy
var validateAjax = function(value) {
return new Promise(function(resolve, reject) {
$.ajax('data.json', {data: {value: value}}).success(function(data, status, xhr) {
if (data.valid) {
resolve(xhr)
}
else {
reject(data.message)
}
}).error(function(xhr, textStatus) {
reject(textStatus)
})
})
}
//...
var validators = [validateAjax];
$('body').delegate('.validate', 'keyup', function() {
var value = $('#the-input').val();
var results = validators.map(function(validator) {
return validator(input)
});
var allResolved = Promise.all(results).then(function() {
//...
}).catch(function() {
//...
})
});
To wydaje się działać dobrze, wejście jest zatwierdzony jako typy użytkowników (kod jest uproszczony, aby nie był zbyt długi, na przykład czas oczekiwania po braku klucza i tak dalej).
Teraz zastanawiam się, jak zabić żądanie ajax, jeśli walidacja z poprzedniego zdarzenia keyup nadal trwa. Czy można w jakiś sposób wykryć, w którym stanie jest obietnica i ewentualnie odrzucić obietnicę z zewnątrz?
wielki, a ja rozumiem, dzięki za odpowiedź. W każdym razie w odniesieniu do usuwania jawnej konstrukcji - xhr nadal musi zostać zwrócony z funkcji validateAjax, prawda? –
Twój validateAjax zwraca undefined - czy brakuje linii? –
@LukasKral - Myślę, że var 'obietnica' musiałaby zostać zwrócona, ponieważ ma funkcję '.abort' - ale nie napisałem kodu, więc mogę tylko spekulować –