【问题标题】:why is my ajax GET data making a strange JSON object?为什么我的 ajax GET 数据会生成一个奇怪的 JSON 对象?
【发布时间】:2014-01-19 02:23:45
【问题描述】:

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

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

它点击一个网址并有一个国家列表:名称和密钥。

我正在尝试分配数据并最终填充国家列表的淘汰赛 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 调用很陌生,所以我什至不知道要谷歌什么。

【问题讨论】:

  • 想要的结果是什么?
  • 那你为什么要声明这个self.selectedOrgCountry = ko.observable();两次?
  • 期望的结果是一个具有键:“1”,名称:“国家名称”的对象。我是否两次声明了 ko 数组?

标签: javascript ajax json knockout.js


【解决方案1】:

$.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;

【讨论】:

  • 啊,感谢您提供一些参考。看看我的编辑,我偶然发现了这个,但不确定它为什么会起作用。
猜你喜欢
  • 1970-01-01
  • 2017-05-13
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 2016-01-08
  • 1970-01-01
相关资源
最近更新 更多