无法读取未定义的JavaScript数组的属性“长度”

时间:2020-05-21 08:52:28

标签: javascript jquery arrays json jsp

我获得了这样的JSON。我想获取一个元素tActivitats并复制到一个数组中:

[
  {
    "identificador": "A462D996C3DDF4C94A3BF1A23EBF2906",
    "num_grup": 1,
    "activitats": "1",
    "tActivitats": [
      {
        "mostrIdioma": "S",
        "calendariWeb": "S",
        "nomActiv": "Visita Museu",
        "codiActiv": "1",
        "tipus": "S",
        "idioma": "0"
      }
    ]
  }
]

对于json的每个元素:

var tActivitatsArray = new Array();
$.post('../ServletJson', {
  elem: 'accesWeb',
  sessionId: "<%=sessionActual%>"
}, function(data) {
  $.each(data, function(t, elem) {
    //dostuff
    tActivitatsArray = elem.tActivitats;
    //dostuff
  });
});

然后我有一个函数,在该函数中传递elem tActviitatsArray并尝试进行迭代,但出现错误无法读取未定义的属性'length'

for (var i = 0; i < tActivitatsArray.length; i++) {
  console.log("test" + tActivitatsArray[i].nomActiv);
}
console.log(JSON.stringify(data));

多数民众赞成在console.log(JSON.stringify(data));结果:


[
   {
      "identificador":"1AE2886120F41BBC0F76567993EF76E0",
      "num_grup":1,
      "activitats":"1",
      "horari":"sessio_1_13_1200_0_1345",
      "total":8.5,
      "num_pers":"3",
      "tarifa":"tarifa_1_3_1",
      "preu":"8.5#1~0#1",
      "butaques":null,
      "nomSala":"",
      "numerada":"false",
      "promo":"",
      "referencia":"100249790",
      "dataVisita":"22/05/2020",
      "combinada":"",
      "article":null,
      "precioTemp":[
         {
            "codActiv":"1",
            "codTarifa":"1",
            "precio":"8.50",
            "dtePromo":"0",
            "dteEuro":"%",
            "total":25.5,
            "tipus":"normal"
         }
      ],
      "tActivitats":[
         {
            "mostrIdioma":"S",
            "calendariWeb":"S",
            "nomActiv":"Visita Museu",
            "codiActiv":"1",
            "tipus":"S",
            "idioma":"0"
         }
      ],
      "tTarifa":[
         {
            "codTarifa":"1",
            "nomTarifa":"General"
         },
         {
            "codTarifa":"1",
            "nomTarifa":"General"
         }
      ]
   },
   {
      "identificador":"1AE2886120F41BBC0F76567993EF76E0",
      "num_grup":2,
      "activitats":"1",
      "horari":"sessio_1_1_1000_0_1059",
      "total":8.5,
      "num_pers":"3",
      "tarifa":"tarifa_1_3_1",
      "preu":"8.5#1~0#1",
      "butaques":null,
      "nomSala":"",
      "numerada":"false",
      "promo":"",
      "referencia":"100249790",
      "dataVisita":"23/05/2020",
      "combinada":"",
      "article":null,
      "precioTemp":[
         {
            "codActiv":"1",
            "codTarifa":"1",
            "precio":"8.50",
            "dtePromo":"0",
            "dteEuro":"%",
            "total":25.5,
            "tipus":"normal"
         }
      ],
      "tActivitats":[
         {
            "mostrIdioma":"S",
            "calendariWeb":"S",
            "nomActiv":"Visita Museu",
            "codiActiv":"1",
            "tipus":"S",
            "idioma":"0"
         }
      ],
      "tTarifa":[
         {
            "codTarifa":"1",
            "nomTarifa":"General"
         },
         {
            "codTarifa":"1",
            "nomTarifa":"General"
         }
      ]
   }
]

3 个答案:

答案 0 :(得分:0)

三件事;

  1. 在迭代之前检查tActivitatsArray是否已定义。

  2. 在值初始化之后进行迭代。

  3. 确保tActivitats数组不是undefined的响应。

答案 1 :(得分:0)

看起来后端是一台ASP.NET服务器。我可以通过<%=sessionActual%>来分辨。

在这种情况下,成功的$.post函数将接收一个json对象data,该对象包含一个子元素d,该子元素保存着服务器请求的资源。

更改此行:

$.each(data,function(t,elem) {
...
}

进入:

$.each( data.d ,function(t,elem){ 
   ...
}

答案 2 :(得分:0)

好吧...逻辑上说,如果正在接收数据并将其正确转换为数组,它应该可以工作:

select * 
from OPC_SourceTags opc 
where not exists (
   select rt.Source_Tag_Id_Fk 
   from Real_Raw_Points rt 
   where opc.Source_Tag_Id = rt.Source_Tag_id_Fk
)
var a = [
      {
        "mostrIdioma": "S",
        "calendariWeb": "S",
        "nomActiv": "Visita Museu",
        "codiActiv": "1",
        "tipus": "S",
        "idioma": "0"
      }
    ];

for (var i = 0; i < a.length; i++) {
    console.log("test: " + a[i].nomActiv);
}

您可以在回调中记录test: Visita Museu 的输出吗? 顺便说一句,您正在JSON.stringify(data)循环中覆盖tActivitatsArray。您应该推送/合并而不是覆盖值。我认为这是您的主意,对吧?