Javascript JQuery中对MongoDB查询的Ajax调用每个循环都会影响结果的顺序
我尝试运行一个AJAX调用,该调用执行mongoDB查询并在JQuery循环中返回排序结果。排序后的数据库结果不会以正确返回的顺序追加到列表中。将Javascript JQuery中对MongoDB查询的Ajax调用每个循环都会影响结果的顺序,javascript,jquery,ajax,Javascript,Jquery,Ajax,我尝试运行一个AJAX调用,该调用执行mongoDB查询并在JQuery循环中返回排序结果。排序后的数据库结果不会以正确返回的顺序追加到列表中。将用户设置为true的某些结果附加到列表中的位置不正确。如果删除对AJAX/MongoDB功能的itemQuery()函数调用,列表项将按正确的排序顺序追加。知道我做错了什么吗 $.each(items, function (i, item) { //itemQuery() holds ajax call that runs mongoDB qu
用户
设置为true
的某些结果附加到列表中的位置不正确。如果删除对AJAX/MongoDB功能的itemQuery()函数调用,列表项将按正确的排序顺序追加。知道我做错了什么吗
$.each(items, function (i, item) {
//itemQuery() holds ajax call that runs mongoDB query and returns sorted results
itemQuery(item._id).done(function(data) {
if (data.length > 0) {
has_users = true;
} else {
has_users = false;
}
listItem = buildListItem(item, has_users);
$('#list_dropdown').append(listItem);
});
});
一些Ajax调用在其他调用之前完成,因此您得到了错误的顺序。您可以使用而不是
$。each()
,返回承诺,并使用等待所有承诺完成,然后追加元素
您的代码可以是这样的:
$.when(
$.map(items, function (i, item) {
//itemQuery() holds ajax call that runs mongoDB query and returns sorted results
return itemQuery(item._id).done(function(data) {
if (data.length > 0) {
has_users = true;
} else {
has_users = false;
}
return buildListItem(item, has_users);
});
})
).then(function (elements) {
$('#list_dropdown').append(elements);
});
一些Ajax调用在其他调用之前完成,因此您得到了错误的顺序。您可以使用而不是
$。each()
,返回承诺,并使用等待所有承诺完成,然后追加元素
您的代码可以是这样的:
$.when(
$.map(items, function (i, item) {
//itemQuery() holds ajax call that runs mongoDB query and returns sorted results
return itemQuery(item._id).done(function(data) {
if (data.length > 0) {
has_users = true;
} else {
has_users = false;
}
return buildListItem(item, has_users);
});
})
).then(function (elements) {
$('#list_dropdown').append(elements);
});
$。每个
都是同步的,因此所有Ajax调用基本上都是一次启动的。元素是按照Ajax调用接收响应的顺序追加的,这是不确定的。您不能创建一个json
列表并在一个Ajax请求中发送所有ID吗?使用此代码会在服务器上产生大量流量,这取决于项目的数量$。每个都是同步的,因此所有Ajax调用基本上是一次启动的。元素是按照Ajax调用接收响应的顺序追加的,这是不确定的。您不能创建一个json
列表并在一个Ajax请求中发送所有ID吗?根据项目的数量,使用此代码会在服务器上产生大量流量