AJAXメソッドから約束を返すと、私はコードをより読みやすく/機能的にするためにどのように使用できるのか見て回っています。私の現在のシナリオは、getBookIds
という機能を持って、そのIDに基づいて書籍のタイトルを返すためにデータベースにAJAX呼び出しを発行することです。テーブルには5つの書籍があり、それぞれの書籍に対応するテキストプロパティを持つアンカータグがあります。すべてのアンカータグがクリックされたら、他のファンキーなAJAXメソッドを起動させたいここで私はこれまで持っているものです:クリックハンドラで使用するための約束を返す
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');
}
}
これは不自然な例ですが、私は私が私の毎日の仕事にこれらの約束を組み込むことができる方法を確認するために苦労しています。これは、最初の約束/延期の力を活用するための悪い例ですか? AJAXのsuccess
コールバックの代わりに、私のロジックがすべてdone
にロールアップされているわけではありません。この問題に取り組む上での提案はありますか?
グレート質問が、それはに属する:http://codereview.stackexchange.com/ –
@JohnStricklerないコードですべての質問には、コードレビューに属します。彼はコンセプトについて尋ねており、コードは生産コードではありません。この質問はここのトピックであり、悪いものではありません:) –
@JohnStrickler私はそこにも投稿します。私はそれが最も適切な場所に移行させてもらってうれしいです。 – wootscootinboogie