为什么我的变量不在我认为应该是的范围内?

时间:2014-03-10 18:52:36

标签: javascript jquery sharepoint asynchronous

在下面的示例中,将打印第一个警报,而第二个警报不会打印。我需要使用ctx.executeQueryAsync来执行许多操作,但是在运行之后我需要使用更新的“titles”值。如果我之后尝试,控制台会说“标题”未定义或空白。我已经能够在代码的其余部分更新for循环中的变量,这是剩下的部分。

顺便提一下,这在SharePoint列表中使用。

function doStuff() {
    var titles = [];
    for(var i = 0; i < selectedItems.length; i++) {
        var id = selectedItems[i].id;
        var item = list.getItemById(id);
        items.push(item);
        ctx.load(item, "Title");
    }
    if (items) {
        ctx.executeQueryAsync(function() {

            for(var j = 0; j < items.length; j++) {
                titles.push(items[j].get_item("Title"));
            }
            alert(titles.toString());
        }, function(sender, args){
            alert('Request failed. ' 
                + args.get_message() + '\n' 
                + args.get_stackTrace());
        });
    }
    alert('titles '+titles.toString());
    }

1 个答案:

答案 0 :(得分:0)

function doStuff() {
    var titles = [];
    for(var i = 0; i < selectedItems.length; i++) {
        var id = selectedItems[i].id;
        var item = list.getItemById(id);
        items.push(item);
        ctx.load(item, "Title");
    }
    if (items) {
        ctx.executeQueryAsync(function(titles) {
            return function() {
                for(var j = 0; j < items.length; j++) {
                    titles.push(items[j].get_item("Title"));
                }
                alert(titles.toString());
            }, function(sender, args){
                alert('Request failed. '
                    + args.get_message() + '\n'
                    + args.get_stackTrace());
            }
        }(titles));
    }
    alert('titles '+titles.toString());
}