2017-12-06 1 views
0

Ich habe JSON mit PHP erstellt. Daten kommen mit Ajax. Aber JSON.parse gibt ein "undefined" -Objekt. Warum ?JSON.parse ist ein "undefined" -Objekt

Php CODE

$emparray = array(); 
while($row =mysqli_fetch_assoc($result)) 
{ 
    $emparray[] = $row; 
} 

echo json_encode($emparray); 

Ajax CODE

$.ajax({ 
     type: "GET", 
     url: "http://localhost:8080/xxx.php/", 
     success: function (msg, result, status, xhr) { 
      var obj= JSON.parse(msg); 
      alert(obj.name);// giving undefined 
     }, 
     error: function (error) { 
     } 
    }); 

json

[{"name":"eng","a":"sdf"}] 
+2

Weil Sie ein Array haben, das ein Objekt im ersten Index hat. 'obj [0] .name' – epascarello

+1

obj ist ein Array, versuche auf das erste Element zuzugreifen. 'obj [0] .name' – ztadic91

+4

Bitte, [benutze' alert() 'zur Fehlerbehebung] (http://stravid.com/de/stop-the-javascript-alert-madness/), benutze' console. log() 'stattdessen. –

Antwort

1

Ihr JSON ist ein Array, das heißt, Sie müssen auf den Index des Objekts zeigen, bevor Sie auf die Eigenschaft zugreifen.

sollten Dieser Code funktioniert:

console.log(obj[0].name); //Returns "eng" 

Wenn Ihr JSON-Array so etwas wie das war:

[{"name":"eng","a":"sdf"}, {"name":"esp", "a":"abc"}] 

Dann obj[1].name würde "esp" zurückzukehren.

1

sollten Sie obj[0].name

Weil Sie die name zugreifen pr Funktion des ersten Elements des Arrays.

0

Eine bessere Möglichkeit, Daten vom Server

$emparray = array(); 
while($row =mysqli_fetch_assoc($result)) 
{ 
    $emparray[] = $row; 
} 

echo json_encode(array("data"=>$emparray)); 

Setzen Sie alle json Antwort, die definieren, an dem vorderen Ende data hier befindet sich auf einem Schlüssel erhalten dann, dass die Server-Antwort in JSON von dataType ist und dann gibt es keine müssen analysieren Daten von JSON.parse()

msg.data.length finden Sie die validaton darüber geben, ob die empfangenen Daten vom Server leer ist oder nicht, die die undefined Fehler verhindern

$.ajax({ 
     type: "GET", 
     dataType: "JSON", 
     url: "http://localhost:8080/xxx.php/", 
     success: function (msg, result, status, xhr) { 
      var obj= msg.data; 
      if(msg.data.length){  
        alert(msg.data[0].name);// wll give name at 0 index 
       } 
     }, 
     error: function (error) { 
     } 
    }); 
+2

Warum ist das besser? Eine *** gute Antwort *** wird immer eine Erklärung haben, was getan wurde und warum es so gemacht wurde, nicht nur für das OP, sondern auch für zukünftige Besucher von SO. –

+0

@JayBlanchard Ich habe eine Erklärung hinzugefügt –

Verwandte Themen