2015-03-18 3 views
0

Частичный вид:передача данных в формате JSON от контроллера для просмотра

var dataa; 
    $.ajax({ 
     url: ServerUrl + '/Dashboard/GetData', 
     type: 'POST', 
     cache: false, 
     dataType: 'text', 
     async: true, 
     error: function (xhr) { 
      //alert('Error: ' + xhr.statusText); 
     }, 
     success: function (result) { 
      debugger; 
      dataa = result; 
      var chart = c3.generate({ 
       data: { 
        type: 'bar', 
        json: [ 
         dataa 
        ], 
        keys: { 
         x: 'indicator', 
         value: ['total'] 
        } 
       }, 
       axis: { 
        x: { 
         type: 'category' 
        } 
       }, 
       bar: { 
        width: { 
         ratio: 0.5 
        } 
       } 
      }); 
     } 
    }); 

Контроллер JSon код

public string GetData() 
{ 
return "{ 'indicator': 'X', 'total': 100 },{ 'indicator': 'Y', 'total': 200 },{ 'indicator': 'Z', 'total': 300 }"; 
} 

Когда я использую приведенный выше код не работает, но если я передать данные JSON, как указано в this JS Fiddle link, он работает. Я передаю данные JSON неправильно из контроллера.?

Пожалуйста, помогите.

+0

его не действительным (ваш возвращающей строку, а не JSON) - это необходимо будет '[{индикатор: ' X ", всего: 100}, {...}]'. Вам было бы лучше создать коллекцию объектов со свойствами 'indicator' и' total', а затем 'return Json (myCollection);' so its valid. –

+1

@StephenMuecke: это действительная строка return "{\" indicator \ ": \" X \ ", \" total \ ": \" 100 \ "}, {\" indicator \ ": \" Y \ " , \ "total \": \ "200 \"}, {\ "indicator \": \ "Z \", \ "total \": \ "300 \"} "; – user2998990

+0

@StephenMuecke: Мне просто нужно проверить его с помощью жестко закодированных json-данных, переданных с контроллера. Пожалуйста, помогите мне с тем же – user2998990

ответ

3

Вы не возвращаете JSON из метода GetData. ли этот способ вернуть JSON

public JsonResult GetData() 
    { 
     var data = new[] { 
      new { indicator= "X", total = 100 }, 
      new { indicator= "Y", total = 200 }, 
      new { indicator= "Z", total = 300 } 
     }; 

      return Json(data,JsonRequestBehavior.AllowGet); 
    } 

И сделать Ajax вызов, как:

$.ajax({ 
     cache: false, 
     type: "GET", 
     url:URL, 
     dataType: 'json', 
     success: function (result) 
     { 
      console.log(result); 
     }, 
     error: function (xhr, ajaxOptions, thrownError) 
     { 
      alert('Failed to retrieve data.');      
     } 
     }); 
+0

3 ошибки для исправления: ему должно быть 'return Json (data, JsonRequestBehavior.AllowGet);', параметр ajax должен быть 'dataType: 'json',' и в обратном вызове успеха он должен быть 'data: {type: 'bar', json: dataa, ...' –

+0

@ 111: Awsome ... Это сработало. – user2998990

+0

@StephenMuecke: Большое спасибо ... Вы оба - спасатели жизни. – user2998990

Смежные вопросы