2017-12-27 2 views
2

Ich habe ein Array im JSON-Array-Format. Ich möchte die Werte von allgemeinen Schlüsseln extrahieren und damit ein neues Array erstellen. Ich habe diese versuchtmachen Sie ein Array mit den Werten ähnlicher Schlüssel aus JSON-Array

var date = []; 
var amt = []; 
for(var i in data){ 
    date.push(data[i].sale_date); 
    amt.push(data[i].total); 
} 

wo sale_date und total die Tasten sind. , aber dieser Code hat ein Array nicht definierter Objekte zurückgegeben. meine Array namens data sieht aus wie

{"sale_date":"2017-12-26 11:05:05","total":"500"}{"sale_date":"2017-12-26 11:05:18","total":"500"} 

Ich erwarte zwei Arrays date[2017-12-26 11:05:05, 2017-12-26 11:05:18 ] und amt[500, 500] Ich bin unten data als Ajax-Antwort von dem Code zu bekommen.

$sql = "SELECT sale_date, total FROM customers"; 
     $result = $conn->query($sql); 
     if($result->num_rows>0){ 
      while($row=$result->fetch_assoc()){ 
       $db_data = $row; 
       print json_encode($db_data); 
      } 
     } 

Und das, wie mein Ajax-Request sieht aus wie

$(document).ready(function(){ 
    $.post("ajax-req-handler.php", 
    { 
     key: "draw-line-chart" 
    }, 
    function(data){ 
     console.log(data); 
     var date = []; 
     var amt = []; 
     for(var i in data){ 
      date.push(data[i].sale_date); 
      amt.push(data[i].total); 
     } 
     console.log(date); 
     console.log(amt); 
    }); 
}); 
+0

Ich sehe kein Problem mit Ihrem Code. – Lalit

+0

Was ist das Problem, vor dem Sie stehen? –

Antwort

2

var data = [ 
 
{"sale_date":"2017-12-26 11:05:05","total":"500"},{"sale_date":"2017-12-26 11:05:18","total":"500"} 
 
]; 
 

 
var date = []; 
 
var amt = []; 
 
for(var i in data){ 
 
    console.log(i); 
 
    date.push(data[i].sale_date); 
 
    amt.push(data[i].total); 
 
} 
 

 
console.log(date); 
 
console.log(amt);
einzukapseln

PHP-Code: -

$sql = "SELECT sale_date, total FROM customers"; 
     $result = $conn->query($sql); 
     $data = array(); 
     if($result->num_rows>0){ 
      while($row=$result->fetch_assoc()){ 
       $db_data[] = $row; 
      } 
     } 
    echo json_encode($db_data); 

Ajax Anfrage: -

$(document).ready(function(){ 
$.post("ajax-req-handler.php", 
{ 
    key: "draw-line-chart" 
}, 
function(data){ 
    console.log(data); 
    data = JSON.parse(data); 
    var date = []; 
    var amt = []; 
    for(var i in data){ 
     date.push(data[i].sale_date); 
     amt.push(data[i].total); 
    } 
    console.log(date); 
    console.log(amt); 
}); 

});

+0

Dies ist genau das, was ich getan habe, aber nur der Unterschied ist, dass anstatt das Array zu definieren, d. H. Daten ich bekomme es durch eine Ajax-Antwort – Waeez

+0

@Waeez Sie müssen Ihren PHP-Code ändern. Das Problem ist mit Ihrem PHP-Code. – Lalit

+0

@Waeez Siehe aktualisierten Code. – Lalit

2

Sie benötigen Objekt zwischen Array

var data = [{"sale_date":"2017-12-26 11:05:05","total":"500"},{"sale_date":"2017-12-26 11:05:18","total":"500"}] 
 
var date = []; 
 
var amt = []; 
 

 
for(var i=0;i<data.length;i++){ 
 
    date.push(data[i].sale_date); 
 
    amt.push(data[i].total); 
 
} 
 
console.log(date); 
 
console.log(amt);

+0

Dies ist genau das, was ich getan habe, aber nur der Unterschied ist, dass anstatt das Array zu definieren, d. H. 'Daten' Ich bekomme es durch eine Ajax-Antwort – Waeez

+0

Sie erhalten mehrere Objekte in Ihrer respose. Also müssen Sie Ihre Daten in Array kapseln und Array-Objekt machen. Bitte überprüfen Sie Ihre Antwort –

2

Dies ist kein JavaScript, sondern PHP-Problem .... Sie senden ungültige JSON. Die folgende:

{"sale_date":"2017-12-26 11:05:05","total":"500"}{"sale_date":"2017-12-26 11:05:18","total":"500"} 

Sollte tatsächlich aussehen:

[{"sale_date":"2017-12-26 11:05:05","total":"500"},{"sale_date":"2017-12-26 11:05:18","total":"500"}] 

Sie benötigen PHP-Code, dies zu ändern:

// Add content type so that jQuery knows you're sending JSON 
header("Content-Type: application/json"); 
$sql = "SELECT sale_date, total FROM customers"; 
$result = $conn->query($sql); 
$db_data = array(); 
while ($row = $result->fetch_assoc()) { 
    $db_data[] = $row; 
} 
echo json_encode($db_data); 

Senden Content-Type Header genug sein sollte, aber man sollte auch ändern Ihr jQuery-Code nur um sicher zu sein:

$(document).ready(function() { 
    $.post("ajax-req-handler.php", { 
     key: "draw-line-chart" 
    }, function(data) { 
     console.log(data); 
     var date = []; 
     var amt = []; 
     for (var i in data) { 
      date.push(data[i].sale_date); 
      amt.push(data[i].total); 
     } 
     console.log(date); 
     console.log(amt); 
    }, "json"); 
    // the 4th parameter is dataType set to json 
}); 
+0

oh. Danke, ich habe meinen PHP-Code korrigiert, aber immer noch "date" und "amt" sind die Arrays von undefinierten Objekten – Waeez

+0

Veröffentlichen Sie den Code, dem Sie den JSON zu "data" (dem AJAX-Code) zuweisen. –

+0

Bitte sehen Sie meine editierte Frage jetzt. – Waeez

1

// Ich hoffe, dies wird Ihnen helfen.

var data = [ {"sale_date":"2017-12-26 11:05:05","total":"500"},{"sale_date":"2017-12-26 11:05:18","total":"500"} ]; 

var date = amt = []; 

X = 0; 

while (x < data.length) { 
date.push(data[x].sale_date); 
amt.push(data[x].total); 
x++; 
}; 

console.log(date); 
console.log(amt); 

Erläuterung:

Linie 1 ist die Anordnung von Objekten, welche die Daten von u ur json Daten ziehen darstellen.

Zeile 2 ist die Deklaration der beiden Variablen-Arrays, denen ein Array zugewiesen ist. Also habe ich die kurze Form der Deklaration von Multi-Variablen auf derselben Anweisungszeile verwendet.

Zeile 3 ist die Initialisierung des Zählers "x", die hilft, die While-Schleife zu unterbrechen, sobald sie zum letzten Objekt im Array "data" zählt.

Zeile 4. Dann die While-Schleife, die durch das Array "Daten" iterieren. Die bedingte Anweisung dort immer überprüfen, ob der Zähler "x" < (weniger als) die Länge des Arrays in jeder Iteration ist.

Zeile 5. Im While-Schleifen-Blockcode den Zähler "x" als Index des Arrays verwenden, um auf die Eigenschaft "sale_date" des Objekts in diesem Array-Index zuzugreifen und sie zum Array "date" zu schieben (z es am Ende des Arrays "Datum").

Zeile 6. Das gleiche wie Zeile 5, Zugriff auf die Eigenschaft Summe in diesem Index des Arrays "Daten" und schieben Sie es auf Array "amt".

Zeile 7 Inkrementieren Sie den Zähler "x" um 1 und weisen Sie ihn zurück an x, um die While-Schleife erneut zu bewerten.

Zeile 8 & 9 ist nur ein Konsolenprotokoll, in dem angezeigt wird, was sich in Datum und Amt befindet.

Dank

Hope this Sinn u macht ... Bitte, lassen Sie mich mit Ihrem Feedback wissen.

+0

Könnten Sie etwas Dokumentation/Erklärung hinzufügen? –

+0

OK .. Im Handumdrehen – Mindsworth

Verwandte Themen