我有从JSON创建的数组,我想在我的选择中创建新选项。 我没有任何错误,我也不知道我的代码有什么问题。 在HTML中我有:
<select class="currencyList">
</select>
在JS中:
var currencyList = [];
$(document).ready(function() {
getCurrencies();
createOptions();
});
function getCurrencies() {
$.getJSON(
"http://api.nbp.pl/api/exchangerates/tables/a/?format=json",
function(response) {
$.each(response[0].rates, function(i, item) {
currencyList.push(item);
});
}
);
}
function createOptions() {
var option = "";
for (var i = 0; i < currencyList.length; i++) {
option += "<option value='" + currencyList[i].code + "'>" + currencyList[i].currency + "</option>";
}
$(".currencyList").append(option);
}
我可以从控制台访问数组中的数据。
答案 0 :(得分:2)
我不知道我的代码有什么问题
这是因为$.getJSON
是异步功能。
基本上,您在createOptions
AJAX 调用完成之前调用$.getJSON
函数。
您需要附加done
承诺回调功能。
function getCurrencies() {
$.getJSON(
"http://api.nbp.pl/api/exchangerates/tables/a/?format=json",
function(response) {
$.each(response[0].rates, function(i, item) {
currencyList.push(item);
});
}
).done(function(){
createOptions();
});
}
答案 1 :(得分:1)
getCurrencies
是异步调用,因此currencyList
在调用createOptions
时仍为空。
在createOptions();
each
$(document).ready(function() {
getCurrencies();
});
function getCurrencies() {
$.getJSON(
"http://api.nbp.pl/api/exchangerates/tables/a/?format=json",
function(response) {
$.each(response[0].rates, function(i, item) {
currencyList.push(item);
});
createOptions();//call here
}
);
}
答案 2 :(得分:0)
由于$.getJSON
是异步函数,因此您应该将createOptions()
调用到文档就绪函数中:
function getCurrencies() {
$.getJSON(
"http://api.nbp.pl/api/exchangerates/tables/a/?format=json",
function(response) {
$.each(response[0].rates, function(i, item) {
currencyList.push(item);
});
createOptions();
}
);
}
答案 3 :(得分:0)
您正在使用AJAX请求并在返回调用时正确构建currencyList
,但在AJAX调用完成之前您正在调用createOptions
。
这是因为代码会继续执行,立即调用getCurrency
和createOptions
。
您可以直接从createOptions
成功致电getCurrency
,类似于以下内容,将货币列表传入其中:
function getCurrencies() {
$.getJSON(
"http://api.nbp.pl/api/exchangerates/tables/a/?format=json",
function(response) {
var currencyList;
$.each(response[0].rates, function(i, item) {
currencyList.push(item);
});
createOptions(currencyList)
}
);
}
function createOptions(currencyList) {
var option = "";
for (var i = 0; i < currencyList.length; i++) {
option += "<option value='" + currencyList[i].code + "'>" + currencyList[i].currency + "</option>";
}
$(".currencyList").append(option);
}
您也可以直接处理货币,类似于:
function getCurrencies() {
$.getJSON(
"http://api.nbp.pl/api/exchangerates/tables/a/?format=json",
createList
);
}
function createList(response) {
var $list = $(".currencyList");
var option;
$.each(response[0].rates, function(i) {
option = "<option value='" + response[0].rates[i].code + "'>" + response[0].rates[i].currency + "</option>"
$list.append(option);
});
}