2016-07-08 2 views
-2

Модельне в состоянии получить значение переменной в JSON

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

Контроллер

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

В мой список имеет 3 массив объекты, я хочу получить доступ к значению для фазы каждого массива объектов и поместить его в переменную hello, но при запуске hello undefined.

+1

вы возвращаете строку JSON, но вы не разбираете ее в javascript, поэтому вы пытаетесь получить доступ к некоторым свойствам строки. вам следует проанализировать результат, используя что-то вроде: 'var bac = JSON.parse (abc);'. Кроме того, имейте в виду, что объект будет проанализирован, сначала вы можете проверить, сначала ли вы получаете результаты (путем выполнения console.log (abc), а затем, делая остальные. – briosheje

+0

данные сохраняются in bac –

+0

Я знаю, но вам нужно подумать о том, какие данные ** хранятся в bac. В настоящее время это строка, и вам нужно сначала преобразовать ее в объект, если вы хотите итерации через нее и получить ее свойства – briosheje

ответ

2

briosheje, упомянутый в его комментарии, проблема может быть в типе данных. Контроллер возвращает строку JSON и напрямую используется в вашем контроллере. Вы должны быть уверены, что данные , что ваш Javascript получает, - это некоторые JSON.

Вы можете использовать, как предложено, функцию JSON.parse(yourstring), которая гарантирует, что вы фактически выполняете итерацию по объекту JSON. Здесь происходит следующий процесс:

  • Ваш контроллер отправляет Json String на ваш JavaScript.
  • Ваш JavaScript получает строку в вашем http запросу: $.get("GetResults1", function (abc)
  • она передает строку отводящие: var bac = abc
  • Затем попробуйте перебрать строку: for (i = 0; i < bac.length; i++)
  • Вы проверить для значения в индексе 0 переменной bac (которая является строкой). Поскольку JavaScript является не типизированным языком, он подчиняется и рассматривает вашу переменную как массив символов. Таким образом, он проверяет ваш первый символ.
  • Затем он пытается получить доступ к полю вашего персонажа phase, которого нет (undefined) и сохраняет его в hello: var hello = bac[0].phase (= undefined).

EDIT Вы можете проверить, как this SO question, которая покрывает вашу проблему очень хорошо.

+0

Хорошо аргументированный и пояснительный ответ. – evolutionxbox