警告:可能是一个愚蠢的问题。
我有一个像这样的ajax获取请求:
$.getJSON("/recruiting/countries/all/", function (data) {
$.each(data, function (name, key) {
var dropdownCountry = new DropdownCountry();
dropdownCountry.name = name;
dropdownCountry.key = key;
self.orgCountryDdl.push(dropdownCountry);
});
alert(JSON.stringify(self.orgCountryDdl()));
});
它命中一个URL,并具有国家列表:名称和密钥。
我正在尝试分配数据,并最终为国家列表填充一个可剔除js的可观察数组。在此GET请求中引用的其他javascript代码:
var DropdownCountry = function (name, key) {
this.name = name;
this.key = key;
};
function UserRecruitingViewModel(apiBaseUrl, userId) {
var self =this;
//...snip...
//ddl country stuff
self.orgCountryDdl = ko.observableArray();
self.selectedOrgCountry = ko.observable();
var DropdownCountry = function (name, key) {
this.name = name;
this.key = key;
};
self.selectedOrgCountry = ko.observable();
///..get request in here...
};
在警报中,我看到此数据返回:
[
{"name":0,"key":{"Id":1,"Name":"Albania"}}
,{"name":1,"key":{"Id":2,"Name":"Algeria"}}
,{"name":2,"key":{"Id":3,"Name":"American Samoa"}}
,{"name":3,"key":{"Id":4,"Name":"Andorra"}}
,{"name":4,"key":{"Id":5,"Name":"Angola"}}
,{"name":5,"key":{"Id":6,"Name":"Anguilla"}}
,{"name":6,"key":{"Id":7,"Name":"Antarctica"}}
...snip...
]
发生了什么,将其放入淘汰赛可观察阵列的最干净方法是什么?
抱歉:预期结果是此数据:
[
{"Id":1,"Name":"Albania"}
,{"Id":2,"Name":"Algeria"}
,{"Id":3,"Name":"American Samoa"}
...snip...
]
我实际上是偶然发现的:
$.getJSON("/recruiting/countries/all/", function (data) {
$.each(data, function (name, key) {
var dropdownCountry = new DropdownCountry();
dropdownCountry.name = key.Name;
dropdownCountry.key = key.Id;
self.orgCountryDdl.push(dropdownCountry);
});
alert(JSON.stringify(self.orgCountryDdl()));
});
第二个函数变量具有我想要的数据。有人可以解释为什么吗?我对ajax调用还很陌生,所以我什至不知道该怎么用Google。
最佳答案
$.each
is defined as follows:
jQuery.each(集合,回调(indexInArray,valueOfElement))
这意味着您致电时:
$.each(data, function (name, key) { ...
您正在遍历数据数组中的每个元素。上面的
name
参数将设置为要迭代的元素的当前索引,而key
是值。 jQuery不会读取参数名称并填写值。您正在寻找的是这个
$.each(data, function (index, element) {
var name = element.name;
var key = element.key;