【发布时间】:2014-02-01 19:31:13
【问题描述】:
我正在尝试从 AJAX 方法返回承诺,并了解如何使用它们使我的代码更易于阅读/功能化。我目前的情况是有一个函数getBookIds 向数据库发出AJAX 调用,以根据其ID 返回一本书的标题。表中有五本书和一个锚标记,其文本属性对应于每本书。单击所有锚标记后,我希望触发其他一些花哨的 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 中汇总了我的所有逻辑。有什么更好地解决这个问题的建议吗?
【问题讨论】:
-
好问题,但它属于:codereview.stackexchange.com
-
@JohnStricler 并非每个带有代码的问题都属于 codereview。他在问一个概念,代码是一个例子而不是生产代码。这个问题是这里的主题,甚至还不错:)
-
@JohnStrickler 我也在那里发帖,我很高兴将它迁移到最合适的地方。
标签: javascript jquery ajax promise