在页面加载时,带有data-id
属性的12个项目将被推送到数组showcaseIds
中:
function pushShowcaseIds () {
showcaseIds = [];
$("[data-id]").each(function () {
showcaseIds.push($(this).attr("data-id"));
});
}
pushShowcaseIds(); // run on load
如果用户已经浏览了数组中的所有项目(全部12个项目),那么currentItemId
为空,我想加载更多项目,等待ajax调用完成,全部推送
$("body").keydown(function(e) {
index = showcaseIds.indexOf(currentItemId);
cacheCurrent = currentItemId;
if (e.keyCode == 37 || e.keyCode == 39){
if(e.keyCode == 39) { // right
currentItemId = showcaseIds[index + 1];
if (currentItemId == null){
$.when(
loadMore()
).then(function(){
index = showcaseIds.indexOf(cacheCurrent);
currentItemId = showcaseIds[index + 1]; // undefined
});
} else {
// continue as normal
}
}
}
});
function loadMore () {
$.when(
$.ajax({
//
})
).then(function(){
pushShowcaseIds();
});
}
然而,在调用loadMore()
函数后,$ .when.then中的currentItemId
未定义,而当我alert
时,它会立即显示。
所以我猜then()
似乎是在立即运行,而不是等待ajax调用完成。我认为这与“嵌套”$ .when then()s有关,但我不确定。
答案 0 :(得分:0)
您只是忘记在loadMore
内返回表达式:
function loadMore () {
return $.when(
$.ajax({
//
})
).then(function(){
pushShowcaseIds();
});
}