【问题标题】:jQuery: load ajax and create js objectsjQuery:加载 ajax 并创建 js 对象
【发布时间】:2016-04-07 08:16:08
【问题描述】:

我正在使用 wp-rest api,我有这个 json 结构可以使用:

[
  {
    "id": 11,
    "title": {
      "rendered": "Test-Font"
    },
    "acf": {
      "schrift": [
        {
          "zeichen": "A",
          "anzahl": "23"
        },
        {
          "zeichen": "B",
          "anzahl": "46"
        },
        {
          "zeichen": "C",
          "anzahl": "42"
        },
        {
          "zeichen": "D",
          "anzahl": "49"
        },
        {
          "zeichen": "E",
          "anzahl": "31"
        },

…


 {
    "id": 12,
    "title": {
      "rendered": "Test-Font2"
    },
    "acf": {
      "schrift": [
        {
          "zeichen": "A",
          "anzahl": "20"
        },
        {
          "zeichen": "B",
          "anzahl": "12"
        },

…

我需要加载此结构的不同帖子,并为每个帖子创建一个对象,其中包含有关 id 和字体详细信息(通过 acf 存储的数据)的信息

目前我有这个脚本:

var schrift = {}

jQuery(function($){
    $.ajax({
        url: 'http://localhost/wordpress-dev/mi/wp-json/wp/v2/schriften/',  
        type: "GET",
        dataType: "json",
        success: function (data) {
            $.each(data, function() {   
                schrift.id = this.id;
                $.each(this.acf.schrift, function(key, value) {
                    schrift.value = value;
                });
                console.log (schrift);
            });
        }
    })
})

但是在新对象中只存储了一个信息,我如何遍历整个 json 结构并创建/存储它以使用它。

我需要的是:对于每个加载的帖子:关于 id 的信息和使用 acf 存储的详细信息。

非常感谢

编辑:

是否可以在一个js对象中重构json对象,其功能类似于关联数组:

这样

11      //ID
  A      // zeichen 
   23    // anzahl
  B 
   46
  C
   42

这样就可以得到这样的值: object['11'].A // should get 23

【问题讨论】:

  • 为什么不将每个schrift 推入一个schriften 数组中?
  • 为什么要复制到新对象?只需使用data 对象,它拥有您需要的一切。

标签: jquery json ajax wordpress rest


【解决方案1】:

我认为,正如 Barmar 所说,您可以使用具有您想要的一切的 data 变量。但是,如果您出于某种原因想要重新构建 json:

var schrifts = [];//array

jQuery(function ($) {
    $.ajax({
        url: 'http://localhost/wordpress-dev/mi/wp-json/wp/v2/schriften/',
        type: "GET",
        dataType: "json",
        success: function (data) {
            data.forEach(function (element) {
                var auxSchrift = {};
                auxSchrift.id = element.id;
                auxSchrift.acfs = [];//an array in the object
                element.acf.schrift.forEach(function (element) {
                    auxSchrift.acfs.push(element);
                });
                schrifts.push(auxSchrift);
            });
            console.log(schrifts);
        }
    });
});

我将 jQuery 的 $.each() 更改为 javascript native 一个 forEach,但您可以根据需要放置 $.each

【讨论】:

  • 非常感谢,是否可以像[11] : [A] : 23 一样更改对象的结构?再次感谢?
  • 那种结构我不是很懂,能不能写成JSON的方式?
  • 非常感谢我编辑了上面的问题,希望你明白我的意思。
  • 你不能做关联数组,javascript中的数组不支持命名索引,只支持数字索引。你可以做的是使用对象,这样:{'Key': 'Value', 'Key2': 'Value2', 'Key3': 'Value3'},但你不能做['key'=> 'val', 'key2'=> 'val2']。您可以嵌套对象和数组,例如{'Key1': ['someVal', {'key': 'val'}]}。希望能帮助到你。顺便说一句,如果你做someVar['someKey'] = someValueVar;,你会得到一个像{'someKey': someValue}这样的对象。
猜你喜欢
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
相关资源
最近更新 更多