0

方法

$.post("Dashboard/UserValuationGet", {}, function (dataSet1)

只在帖子之后运行

$.post("Dashboard/UsersGet", {}, function (dataSet))

执行完毕。

代码将在循环中传递我的方法几次,并且只有在执行 post 方法之后才会传递最后的次数。

问题在于我的本地存储没有改变,所以它会在同一个变量输入上运行几次 post 方法。

$(document).ready(function () {

    //Show diffrent menu for Valuator and Aministrator
    getRoleMenu();


    $.post("Dashboard/UsersGet", {}, function (dataSet) {
        var obj = jQuery.parseJSON(dataSet);
        var table = obj.Table;
        var countUsers = 0;
        lis = '';
        for (var i = 0, len = table.length; i < len; i++) {
            var array = table[i];
            if (array.Active == 1) {
                var name = array.Name;
                valCount = 0;


                $.post("Dashboard/UserValuationGet", {}, function (dataSet1) {

                    var obj1 = jQuery.parseJSON(dataSet1);
                    var table1 = obj1.Table;
                    localStorage.setItem("valCount", table1.length.toString());

                });
                valCount = localStorage.getItem("valCount");

                lis += '<li class="subitem1"><a href="#" onclick="return ShowValuationsAssigned()">' + name + '<span>' + valCount + '</span></a></li>';                    

                countUsers = countUsers + 1;
            }

        }
        $("#UserList").empty().html(lis);
        $('#userCount').html(countUsers.toString());

    });

});
4

1 回答 1

0

您不是在循环的每一遍中递增valCount计数器或localStorage.valCount in,而是将它们设置为当前遍的值。此外,您在当前 ajax 请求完成之前将存储中的计数插入到 html 中。AJAX 是异步的。

您的循环需要看起来像这样:

for (var i = 0, len = table.length; i < len; i++) {
    var array = table[i];
    if (array.Active == 1) {
        var name = array.Name;

        $.post("Dashboard/UserValuationGet", {}, function(dataSet1) {
            /* get the current count*/
            var valCount = localStorage.getItem("valCount");
            /* no need to use $.parseJSon, just set dataType of request */
            var obj1 = /*jQuery.parseJSON(dataSet1)*/ dataSet1;
            var table1 = obj1.Table;
            /* add this response to count*/
            valCount+=table1.length/*.toString()*/
            localStorage.setItem("valCount",valCount );
            /* need this inside the ajax complete callback or count won't have been updated*/
            lis += '<li class="subitem1"><a href="#" onclick="return ShowValuationsAssigned()">' + name + '<span>' + valCount + '</span></a></li>';

        },'json');/* last argument of $.post is dataType*/


        countUsers = countUsers + 1;
    }
}
于 2012-11-02T11:59:09.423 回答