2016-07-08 19 views
-2

in json zu bekommen Modellnicht in der Lage Wert einer Variablen

public class AlldataPoints 
{ 
    public string name {get;set;} 
    public string phone {get;set;} 
    public string phase {get;set;} 
} 

-Controller

public ActionResult GetResults1() 
{ 
    List<AlldataPoints> lst = (List<AlldataPoints>)Session["list"]; 
    return Json(new { data = lst }, JsonRequestBehavior.AllowGet); 
} 

Script

function Pie() { 
    $.get("GetResults1", function (abc) { 
     var bac = abc; 
     for (i = 0; i < bac.length; i++) { 
      var hello = bac[0].phase; 
     } 
    }); 
} 

Da meine Liste 3-Array Ich möchte auf den Wert für die Phase jedes Objektarrays zugreifen und es in die Variable Hallo setzen, aber beim Ausführen ist Hallo undefiniert.

+1

Sie geben eine JSON-Zeichenfolge zurück, aber Sie analysieren sie nicht in Javascript. Daher versuchen Sie, auf einige Eigenschaften einer Zeichenfolge zuzugreifen. Sie sollten stattdessen das Ergebnis mit etwas wie: 'var bac = JSON.parse (abc);'. Denken Sie auch daran, dass ein Objekt analysiert wird. Sie können zuerst prüfen, ob Sie die Ergebnisse erhalten (indem Sie die Datei console.log (abc) ausführen) und dann den Rest. – briosheje

+0

Die Daten werden gespeichert in bac –

+0

Ich weiß, aber Sie müssen darüber nachdenken, ** welche Daten ** in bac gespeichert wird.Es ist derzeit eine Zeichenfolge, und Sie müssen es zuerst in ein Objekt konvertieren, wenn Sie es durchlaufen und seine Eigenschaften erhalten möchten – briosheje

Antwort

2

Als briosheje in seinem Kommentar erwähnt, kann das Problem im Datentyp sein. Ihr Controller gibt eine JSON-Zeichenfolge zurück und wird direkt in Ihrem Controller verwendet. Sie müssen sicher sein, dass die Daten, die Ihr Javascript erhält ist einige JSON.

Sie können, wie vorgeschlagen, die JSON.parse(yourstring)-Funktion verwenden, die sicherstellt, dass Sie tatsächlich über ein JSON-Objekt iterieren. Was läuft hier ist der folgende Prozess:

  • Ihr Controller sendet die JSON String zu Ihrem JavaScript.
  • Ihr JavaScript bekommt die Zeichenfolge in Ihrem http Anfrage: $.get("GetResults1", function (abc)
  • Es übergibt dann die String zu bac: var bac = abc
  • Sie dann versuchen, eine Zeichenfolge iterieren: for (i = 0; i < bac.length; i++)
  • Sie überprüfen für den Wert im Index 0 Ihrer bac Variable (die ein String ist). Da es sich bei JavaScript um eine nicht typisierte Sprache handelt, gehorcht sie und betrachtet Ihre Variable als ein Array von Zeichen. Also, es prüft nach deinem ersten Charakter.
  • Dann versucht es auf das Feld phase Ihres Zeichens zuzugreifen, das nicht existiert (undefined) und speichert es in hello: var hello = bac[0].phase (= undefined).

EDIT Sie als this SO question überprüfen können, die sehr gut Ihr Problem abdeckt.

+0

Gut durchdachte und erklärende Antwort. – evolutionxbox