【问题标题】:execute javascript after for loop在for循环之后执行javascript
【发布时间】:2016-07-29 13:36:09
【问题描述】:

我有一个 for 循环,它从子站点的列表中获取数据,以使用异步 ajax 请求在页面上构建一个 html 列表,这是可行的,但我希望在生成列表后对其进行排序以按字母顺序显示列表命令。我正在使用 javascript 进行学习,因此不胜感激。我需要在 onWebsLoaded 函数完成后运行 sortProjects 函数。

    function onWebsLoaded(sender, args) {
    for (var i = 0; i < this.webs.get_count(); i++) 
    {
        client = "";
        var title = this.webs.itemAt(i).get_title();
        var desc = this.webs.itemAt(i).get_description();
        var url = this.webs.itemAt(i).get_serverRelativeUrl();
        id = (title).replace(/\ /g, "");
        getProjectProperties(url, title, desc, client, id); 
    }
}
function sortProjects () {
    tinysort('ul#projectstable>li');
}
function getProjectProperties (url, title, desc, client, id) {
    $.ajax({
        url: url + "/_api/web/lists/getbytitle('Project Properties')/items('1')",
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (data) {
                    client = data.d.Title;
                    $('#projectstable').append("<li id='" + id + "' class='ms-ListItem'><a href='" + url + "'><span id='" + id + "Client' class='ms-ListItem-primaryText'>" + title + "</span><span class='ms-ListItem-secondaryText'>" + client + "</span><span class='ms-ListItem-tertiaryText'>" + desc + "</span></a></li>");
        },
        error: function () {
                    $('#projectstable').append("<li id='" + id + "' class='ms-ListItem'><a href='" + url + "'><span id='" + id + "Client' class='ms-ListItem-primaryText'>" + title + "</span><span class='ms-ListItem-secondaryText'>" + client + "</span><span class='ms-ListItem-tertiaryText'>" + desc + "</span></a></li>");
        }
    });
}

【问题讨论】:

    标签: javascript jquery ajax sharepoint callback


    【解决方案1】:

    您可以修改逻辑,以便存储从$.ajax() 调用返回的承诺数组。然后您可以将该数组apply() 发送到$.when 并调用sortProjects()。试试这个:

    function onWebsLoaded(sender, args) {
        var requests = [];
        for (var i = 0; i < this.webs.get_count(); i++)  {
            client = "";
            var title = this.webs.itemAt(i).get_title();
            var desc = this.webs.itemAt(i).get_description();
            var url = this.webs.itemAt(i).get_serverRelativeUrl();
            id = (title).replace(/\ /g, "");
            requests.push(getProjectProperties(url, title, desc, client, id)); 
        }
        $.when.apply($, requests).done(sortProjects);
    }
    
    function sortProjects () {
        tinysort('ul#projectstable>li');
    }
    
    function getProjectProperties (url, title, desc, client, id) {
        // note 'return' below
        return $.ajax({
            url: url + "/_api/web/lists/getbytitle('Project Properties')/items('1')",
            method: "GET",
            headers: { "Accept": "application/json; odata=verbose" },
            success: function (data) {
                client = data.d.Title;
                $('#projectstable').append("<li id='" + id + "' class='ms-ListItem'><a href='" + url + "'><span id='" + id + "Client' class='ms-ListItem-primaryText'>" + title + "</span><span class='ms-ListItem-secondaryText'>" + client + "</span><span class='ms-ListItem-tertiaryText'>" + desc + "</span></a></li>");
            },
            error: function () {
                $('#projectstable').append("<li id='" + id + "' class='ms-ListItem'><a href='" + url + "'><span id='" + id + "Client' class='ms-ListItem-primaryText'>" + title + "</span><span class='ms-ListItem-secondaryText'>" + client + "</span><span class='ms-ListItem-tertiaryText'>" + desc + "</span></a></li>");
            }
        });
    }
    

    【讨论】:

    • 我已经修改了代码,但它仍然没有运行它你能评论你改变的位以检查我没有错过任何东西吗? @罗里
    • 逐行检查,这个解决方案对我不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2018-06-18
    • 1970-01-01
    相关资源
    最近更新 更多