2015-05-12 71 views
1

我试图通过jQuery Ajax来检索对象的列表MVC5通过jQuery的Ajax返回对象的泛型列表

我有这样一个控制器方法:

[HttpGet] 
public JsonResult GetAllStates(string listname = "") 
{ 
    clsDdl ddl = new clsDdl(); 
    List<clsDdl> retval = new List<clsDdl>(); 
    ddl.id = "1"; 
    ddl.value = "Dropdown1"; 
    ddl.status = "DDL Status"; 
    ddl.attributes = "First Dropdown Text"; 
    retval.Add(ddl); 

    //return retval; 
    return Json(new 
    { 
     list = retval 
    }, JsonRequestBehavior.AllowGet); 
} 

我的继承人下拉类,我我试图在我看来返回

public class clsDdl 
{ 
    public string id { get; set; } 
    public string value { get; set; } 
    public string status { get; set; } 
    public string attributes { get; set; } 
} 

代码看起来像这样

function LoadListItems (options) { 

var listname = options.listname; 

$.ajax({ 
     type: "GET", 
     url: url, 
     data: JSON.stringify({ 
      listname: listname 
     }), 
     contentType: "application/json; charset=utf-8", 
     async: true, 
     success: function (result) { 
      alert(result[0].value); 
     }, 
     error: function (xhr, status, err) { 
      alert(err.toString(), 'Error - LoadListItemsHelper'); 
     } 
     }); 

我的控制器操作正在进行中。但警报总是“未定义”。 我也试过

success: function (data) { 
       var result = data.d; 
       for (var i = 0; i < result.length; i++) { 
       alert(result[i].attributes); 
       } 

没有成功。我究竟做错了什么 ?

在此先感谢...

+0

看起来你是一个命名的属性称为列表内返回JSON 。你为alert(data.list)获得了什么;'? –

+0

我加了这个代码 成功:function(data){ var result = data.list; alert(data.list); 警报(结果。长度); 警报是'未定义'第二个警报给出错误'无法获取属性长度'的未定义或空引用 – w2olves

+0

当你在浏览器中收到json时,你可以分析响应,如果它有一些东西,如果是空的应该开始也看到为什么不正确返回到视图 –

回答

3

您是从服务器返回的JSON。 您在Ajax请求设置dataTypejson

  1. 的contentType - >数据发送到服务器

  2. 的dataType - 从服务器返回>数据

What is content-type and datatype in an AJAX request?

 $.ajax({ 
     type: "GET", 
     url: url, 
     data: JSON.stringify({ listname: listname }), 
     contentType: "application/json; charset=utf-8", 

//HERE 
     dataType: 'json', 
     success: function (result) { 
       alert(result[0].value); 
     }, 
     error: function (xhr, status, err) { 
       alert(err.toString(), 'Error - LoadListItemsHelper'); 
     } 
    }); 

2.

您正在返回

return new Json(new {list = retval}, JsonRequestBehavior.AllowGet); 

success: function(result)

您可以访问列表如下:result.list[index]

success: function (result) { 

     for(var i =0; i < result.list.length; i++){ 

     alert(result.list[i].value); 
     alert(result.list[i].status); 
     } 
} 

编辑基于Aivan Monceller的评论你可以这样做:

当你发送GET你不需要

contentType: "application/json; charset=utf-8", 

所以,你可以写你的Ajax这样的:

 $.ajax({ 
     type: "GET", 
     url: url, 
     data: { listname: listname }, 

//HERE 
     dataType: 'json', 
     success: function (result) { 
       alert(result[0].value); 
     }, 
     error: function (xhr, status, err) { 
       alert(err.toString(), 'Error - LoadListItemsHelper'); 
     } 
    }); 
+0

我根据您的建议进行了更改。顺便谢谢你的链接,非常有帮助。 我得到的错误是 语法错误:JSON.parse:第1行的JSON数据 我期待到这一点,但如果你有一个建议,请随时分享... – w2olves

+0

的列1意外的字符你从服务器得到什么回应?在你的成功函数中使用console.log(result) –

+0

感谢Dawood,控制台错误是'找不到元素' – w2olves