Jquery for()循环在第二个$getJSON请求内不工作

Jquery for()循环在第二个$getJSON请求内不工作,jquery,json,ajax,api,Jquery,Json,Ajax,Api,背景:我正在尝试拉入JSON数据以填充一个职业部分。我在第一次$.getJSON()请求中成功请求并提取了JSON数据,并填充了标题。下一步是拉取发布ID URL并打开第二个请求以拉取描述并应用URL 问题:第二个请求有效,因为我可以看到拉入控制台的对象,但由于某些原因,我的循环没有用描述或URL填充该部分。我也没有收到任何控制台错误,这使得确定问题有点困难。它是否与异步请求有关?我是第一次修补AJAX、JSON和API 一些API文档(如果需要): //创建要将过帐附加到的变量 var pos

背景:我正在尝试拉入JSON数据以填充一个职业部分。我在第一次
$.getJSON()请求中成功请求并提取了JSON数据,并填充了标题。下一步是拉取发布ID URL并打开第二个请求以拉取描述并应用URL

问题:第二个请求有效,因为我可以看到拉入控制台的对象,但由于某些原因,我的循环没有用描述或URL填充该部分。我也没有收到任何控制台错误,这使得确定问题有点困难。它是否与异步请求有关?我是第一次修补AJAX、JSON和API

一些API文档(如果需要):

//创建要将过帐附加到的变量
var postingsContainer=document.querySelector('div.job-container');
//创建发布JSON请求
$.getJSON('https://api.smartrecruiters.com/v1/companies/SynchronyGroup/postings,职能(过帐){
//检查是否正在提取数据
控制台日志(过帐);
表演工作(张贴);
});
//函数,用于提取json数据并填充该部分
函数showJobs(jsonObj){
//保存作业公告json数据的变量
var jobs=jsonObj['content']
//循环以创建打开位置元素
对于(变量i=0;i
签出此工作代码只需更改此行
var jobs=jsonObj['content']
。将行更改为
var jobs=jsonObj.content

//创建要将过帐附加到的变量
var postingsContainer=document.querySelector('div.job-container');
//创建发布JSON请求
$.getJSON('https://api.smartrecruiters.com/v1/companies/SynchronyGroup/postings,职能(过帐){
//检查是否正在提取数据
//控制台日志(过帐);
表演工作(张贴);
});
//函数,用于提取json数据并填充该部分
函数showJobs(jsonObj){
//保存作业公告json数据的变量
var jobs=jsonObj.content;
//循环以创建打开位置元素
对于(变量i=0;i

您的主要问题是职位发布的价值

此变量在每次循环迭代时在showJobs函数中创建,但您从未将此变量传递给showDetails函数

因为这个变量是在每次迭代中创建的,所以您需要确保传递正确的值(有关更多信息,请查看js及其工作原理)。在您的情况下,因为$.getJSON(jobId,function(data){/strong>不能简单地使用变量名称。如果是,您将传递最后一个值:循环结束时的值。这意味着需要关闭上下文

为了实现这一点,您可以使用iLife。有关这一点的更多信息,请参考以下问题:

例如:

//创建要将过帐附加到的变量
var postingsContainer=document.querySelector('div.job-container');
//创建发布JSON请求
$.getJSON('https://api.smartrecruiters.com/v1/companies/SynchronyGroup/postings
// Create variable to append postings to
var postingsContainer = document.querySelector('div.job-container');

// Creates postings JSON request
$.getJSON('https://api.smartrecruiters.com/v1/companies/SynchronyGroup/postings', function(postings) {

    // Check to see if data is being pulled
    console.log(postings);

    showJobs(postings);

});

// Function that pulls json data and populates careers section
function showJobs(jsonObj) {

    // Variable that holds job postings json data
    var jobs = jsonObj['content']

    // Loop to create open position elements
    for (var i = 0; i < jobs.length; i++) {

        // Creates Column for job postings
        var jobPosting = document.createElement('div')
        jobPosting.setAttribute('class', 'col-12 col-md-6 col-lg-4 my-5 job-posting');

        // Creates Job Title 
        var jobH5 = document.createElement('h5');
        jobH5.textContent = jobs[i].name;

        jobPosting.appendChild(jobH5);
        postingsContainer.appendChild(jobPosting);

        // Store job post IDs in var
        var jobId = jobs[i].ref;

        // Creates post 2nd ID JSON request
        $.getJSON(jobId, function(data) {

            // Check to see if data is being pulled
            console.log(data);

            showDetails(data);

        });

    }
}

//Function for posting description and apply url
function showDetails(data) {

    // Loop to pull company description and apply url, then append to job posting element
    for (var j = 0; j < data.length; j++) {

        console.log("I work");

        // Creates Company Desc. and Apply Link
        var jobDetail = document.createElement('p');
        var jobApply = document.createElement('a');

        jobDetail.textContent = data[j].sections.companyDescription;
        jobApply.setAttribute('href', data[j].applyUrl);
        jobApply.setAttribute('class', 'btn-primary');

        jobPosting.appendChild(jobDetail);
        jobPosting.appendChild(jobApply);

    }
}