警告:可能是一个愚蠢的问题。

我有一个像这样的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;

09-07 17:24
查看更多