[javascript]使用1st json中的数据并将其转换为变量并使用该变量调用第二个json

时间:2017-07-15 20:44:36

标签: javascript jquery json

大家好,我是新手,但我遇到了问题并需要你的帮助,所以在我的代码中我调用了一个json文件。

var data = {};
var spectator;
var tmp = [];
var IDcatcher =[];
var summonerID = [];
$.getJSON(getUrl, function(data) {
            tmp = data;

            $.each(tmp, function(key){
                for (IDcatcher in tmp) {}

                });
            summonerID = tmp[IDcatcher].id;
        });

所以这给了我来自Json的ID,它存储在summonerID variabel中,现在我想使用这个变量来完成url以获得第二个Json所以..

var spectatorUrl = "link" + summonerID;

现在获得第二个Json

var Charcatcher =[];
var CharID = [];
$.getJSON(spectatorUrl, function(data) {
        tmp = data;

        $.each(tmp, function(key){
            for (Charcatcher in tmp) {}

            });
        CharID = tmp[Charcatcher].id;
    });

我的问题是第二个Json没有运行,它没有得到任何东西而且什么也没有返回(显然)。

帮助? 我不能在不同的时间运行2个jsons?如果是这样,我该怎么做或改变它?

1 个答案:

答案 0 :(得分:0)

正如我所提到的,由于JavaScript的异步特性,如果你有一个带回调的AJAX请求和一些跟随请求的代码,JS将启动AJAX请求并继续使用其余的代码。它不会等待AJAX​​请求返回的结果。

这是一个简单的演示 -



function first() {
  setTimeout(() => {
    console.log("1");
  }, 2000);
  
  console.log("2");
};

first();




查看代码中console.log语句的顺序,然后检查控制台中的实际顺序。

要解决原始问题,可以在第一个问题中嵌套$.getJSON(),这将确保在您发出第二个AJAX请求时summonerID可用。

$.getJSON(getUrl, function(data) {
            tmp = data;

            $.each(tmp, function(key){
                for (IDcatcher in tmp) {}

                });
            summonerID = tmp[IDcatcher].id;

            // second AJAX request
            var spectatorUrl = "link" + summonerID;
            $.getJSON(spectatorUrl, function(data) {
               // logic
            });

        });