Ich spiele herum mit Versprechen von einer AJAX-Methode und sehen, wie ich sie verwenden kann, um meinen Code einfacher zu lesen/funktional. Mein aktuelles Szenario ist eine Funktion getBookIds
, die einen AJAX-Aufruf an eine Datenbank ausgibt, um den Titel eines Buches basierend auf seiner ID zurückzugeben. Es gibt fünf Bücher in der Tabelle und ein Anker-Tag, dessen Texteigenschaften jedem Buch entsprechen. Ich möchte, dass eine andere fantastische AJAX-Methode ausgelöst wird, nachdem alle Anker-Tags angeklickt wurden. Hier ist, was ich bisher habe:Returning Promises für die Verwendung in Click-Handlern
HTML
<a href="#">1</a>
<a href="#">3</a>
<a href="#">4</a>
<a href="#">5</a>
<a href="#">7</a>
JS
//hacky globals
var bookArray = [];
bookArray.length = $('a').length;
//ajax function
function getBookIds(data) {
return $.ajax({
type: "POST",
url: "Service.asmx/GetBookById",
data: JSON.stringify({
'titleId': data
}),
dataType: "json",
contentType: "application/json"
});
}
//click handler
$('a').on('click', function() {
var index = $('a').index($(this));
var titleId = $(this).text();
getBookIds(titleId).done(function (results) {
bookArray[index] = results.d;
var isEmpty = arrayChecker(bookArray);
fancyAjax(isEmpty);
});
});
//checks for undefined values in the array
function arrayChecker(array) {
var isEmpty = 0;
$.each(array, function (key, val) {
if (val === undefined) {
isEmpty++;
}
});
return (isEmpty > 0);
}
//bool comes from arrayChecker if no undefined then go AJAX
function fancyAjax(bool) {
if (!bool) {
alert('alert message for fancy stuff');
}
}
Dies ist ein konstruiertes Beispiel, aber ich bin zu kämpfen, um zu sehen, wie ich diese Versprechen in meine tägliche Arbeit integrieren können. Ist das nur ein schlechtes Beispiel dafür, die Macht von Versprechen/Aufschubs zu nutzen? Es scheint, dass anstelle der success
Rückruf auf AJAX, nicht habe ich meine ganze Logik aufgerollt innerhalb done
. Irgendwelche Vorschläge, um das besser in Angriff zu nehmen?
Gute Frage, aber es gehört in: http://codereview.stackexchange.com/ –
@JohnStrickler nicht jede Frage mit Code gehört in Codereview. Er fragt nach einem Konzept und der Code ist ein Beispiel, kein Produktionscode. Diese Frage ist Thema hier und es ist nicht einmal eine schlechte :) –
@JohnStrickler Ich poste dort auch, ich bin froh, es zu haben, wohin es am passendsten ist. – wootscootinboogie