2017-05-25 2 views
0

Ich habe eine Ajax-Werte von db bekommen, und das Ergebnis wird in ein Array geschoben:Extrahierung Array - undefined

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); 
}); 

Dies sind die komplette Funktion. Wenn ich das Array console.log anmelde, kam es als mein Bild heraus. Ich kann die Daten nicht extrahieren.

Wenn ich das Array in die Konsole drucke, kam es wie das Bild unten.

Wie bekomme ich die Werte aus dem Array zurück? Wenn ich ein arrT [0] mache, bekomme ich ein undefined.

Bitte beraten.

enter image description here

+0

Sie sind Konsolenprotokollierung arrT außerhalb der .done(). Sie sollten die logarithmus-arrT-Konsole nach dem Abschluss von done() trösten, oder Sie können die Timeout-Funktion für 1000 Millisekunden aufrufen und dann arrT protokollieren. Sie werden den Unterschied sehen. – supritshah1289

Antwort

0

Dies ist höchstwahrscheinlich eine asynchrone Ausgabe - werden Sie arrT[0] außerhalb der .done() Funktion zugreifen? Wenn dies der Fall ist, befindet sich zu dem Zeitpunkt, zu dem Sie darauf zugreifen, nichts im Array - es ist leer. Die Ajax-Anforderung, die Sie erstellen, dauert einige Zeit (Millisekunden), und erst nachdem die Daten zurückgegeben wurden, enthält Ihr Array etwas. Um die Werte im Array zu verwenden, versuchen Sie, den Code, der das Array verwendet, in die .done()-Funktion selbst einzufügen.

+0

Die Sache ist, ich benutze ein Callback-System, um Async zu vermeiden: falsch auf Ajax. Wenn ich async: false mache, ist der Wert korrekt definiert. Nach .done() mache ich ein console.log (arrT), und ich habe das Bild, das ich angehängt habe, was bedeutet, dass der Wert da ist, oder? Erst als ich versuchte den Wert zu extrahieren, habe ich das undefined. – rherry

+0

Versuchen Sie console.logging innerhalb der 'done()' Funktion. Wenn Sie es draußen tun, werden Sie auf das asynchrone Problem stoßen, weil der gesamte Code außerhalb der Funktion 'done()' zuletzt ausgeführt wird. –