延迟jQuery Ajax调用仅显示函数内部的数据

时间:2017-11-02 16:23:11

标签: jquery ajax promise deferred

我已经尝试了几种方法,使用.done和.then,我得到相同的结果 - 数据似乎填充数组就好了(我可以在#34; pushTeamMembers&#34中调用数组内部的数组;),但是当我尝试在主流程中查看它时,数组是空的。

我认为它可能是某种范围问题,但如果我在最后一个console.log之前稍微暂停(设置间隔),它会很有效 - 这似乎意味着程序在数据之前显示数据实际上被拉下来了。感谢。

var siteurl = _spPageContextInfo.webAbsoluteUrl;
var teamMembers = [];

// ********** Ajax query 
    var teamListData = $.ajax({
        type: 'get',
        url: siteurl + "/_api/web/lists/getbytitle('The Team')/items",
        headers: { "Accept": "application/json; odata=verbose" }
    });

// ********** Ajax query deferred ".then" handler
    teamListData.then(function (value) {
      $.each(teamListData, function(i, item) {
        var thisNameId = teamListData[i].NameId;
        var workStream = teamListData[i].Title;
        var member = {id: thisNameId, workstream: workStream};
        pushTeamMembers(member);
      });
    });

// ********** Push onto array
      function pushTeamMembers(member)
      {
        teamMembers.push(member);
        // ********** This shows that the array is populated.
        console.log(teamMembers);
      }

// ********** This shows that the array is empty - unless I put a 
// slight pause here ( set interval ).

console.log(teamMembers);

1 个答案:

答案 0 :(得分:-1)

更新:我认为我对此问题的看法不正确。在.done函数中包含数据就是我所需要的。程序将继续并在.done函数完成之前执行第二个console.log,因此尝试访问程序流中的数据,在延迟上下文的上下文之外,会使其延迟。我只需要在延迟上下文中保持链接函数,而不是回退到程序流程中。我想这很明显,我很想删除我的帖子,但也许这会帮助像我这样的新手。