大家好,我是新手,但我遇到了问题并需要你的帮助,所以在我的代码中我调用了一个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?如果是这样,我该怎么做或改变它?
答案 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
});
});