javascript - Ajax 调用 JQuery 中的 MongoDB 查询每个循环都会影响结果的顺序

标签 javascript jquery ajax

我正在尝试运行 AJAX 调用,该调用执行 mongoDB 查询并在 JQuery 每个循环中返回排序结果。排序的数据库结果不会以正确返回的顺序附加到列表中。一些将 has_users 设置为 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 调用先于其他调用完成,因此您会得到错误的顺序。您可以使用$.map()而不是 $.each(),返回一个 Promise,并使用 $.when()等待所有 promise 完成,然后追加元素。

你的代码可能是这样的:

$.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);
});

关于javascript - Ajax 调用 JQuery 中的 MongoDB 查询每个循环都会影响结果的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40352617/

相关文章:

javascript - 使用react-router获取服务器端数据

javascript - 计算数组中的唯一元素而不排序

javascript - 将数据从一个表单复制到多个表单

javascript - 如何将单选按钮名称列表传递给 spring Controller 并将它们显示到成功页面

javascript - 如何停止ajax请求

javascript - 有时 ajax 有效,有时无效,单击行功能也不起作用

javascript - PHP json_encode 在字符串末尾加一个1

c# - ajax jquery post,需要对初学者进行一些微调

javascript - 如何在 AngularJS 中更新 json 文件中的数据?

javascript - 通过标签输入下拉搜索