【问题标题】:Extracting Array - undefined [duplicate]提取数组 - 未定义 [重复]
【发布时间】:2017-05-25 19:25:24
【问题描述】:

我有一个 ajax 从 db 获取值,并将结果推入一个数组:

function pushPONFail(dt, ct) {
    if (ct < 12) {
        var tMon =  parseInt(dt.getMonth())+1; 
        var tYear = dt.getFullYear();

        ct++;
    } else {
        return;
    }
    data = {"qType": 101, 
            "tbl": 'qualitypqa.dbo.centerthickness',
            "month": tMon,
            "year": tYear,
            "type": 'Lotrafilcon B'};   
    $.ajax({
      cache : false,
      url: "getrpt.php",
      type: "get",
      data: data,
      contentType: 'application/json; charset=utf-8',
      async: true,
      error: function(XMLHttpRequest, textStatus, errorThrown) {
        console.log("error: "+textStatus+" : "+errorThrown);
      }
    })
    .done(function(response){  
        var obj = jQuery.parseJSON(JSON.stringify(response));
        arrPONFail.push({Month: months[tMon-1]+"/"+tYear, PONFail: obj[0].PONFail});
        dt = new Date(dt.setMonth(parseInt(dt.getMonth()) - 1));
        pushPONFail(dt, ct);
    }); 

} // pushing values such as ["May/2017", 0]

$(function() {
    var dt = new Date();
    pushPONFail(dt, 0);

    console.log(arrPONFail);
});

这些是完整的功能。当我 console.log 数组时,它就成了我的照片。我无法提取数据。

当我将数组打印到控制台时,结果如下图所示。

如何从数组中取回值? 当我执行 arrT[0] 时,我得到一个 undefined。

请指教。

【问题讨论】:

  • 您在 .done() 之外使用控制台记录 arrT。您应该在 done() 完成后控制台记录 arrT,或者您可以调用超时函数 1000 毫秒然后记录 arrT。你会看到区别。

标签: javascript arrays undefined push


【解决方案1】:

这很可能是一个异步问题 - 您是在 .done() 函数之外访问 arrT[0] 吗?如果是这样,那么在您访问它时,数组中没有任何内容 - 它是空的。您发出的 ajax 请求需要一些时间(毫秒),并且只有在数据返回之后,您的数组才会包含某些内容。要使用数组中的值,请尝试将使用数组的代码放入 .done() 函数本身。

【讨论】:

  • 问题是,我使用回调系统来避免在 ajax 上放入 async: false。如果我执行 async: false,则值定义正确。在.done() 之后,我做了一个console.log(arrT),我得到了我附加的图片,这意味着那个值就在那里,对吧?只有当我尝试提取值时,我才有未定义的值。
  • done() 函数中尝试console.logging。如果你在外面做,你会遇到异步问题,因为done() 函数之外的所有代码都会最后运行。
猜你喜欢
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 2022-11-20
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多