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 ループの各パスをインクリメントするのではなく、現在のパスの値に設定しています。さらに、現在の 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 に答える