【问题标题】:Return JSON from MVC via AJAX通过 AJAX 从 MVC 返回 JSON
【发布时间】:2014-06-25 15:00:43
【问题描述】:

我一直在使用硬编码的 JSON 对象:

var resuts = [{id: 1, Code: "Code A"}, {id: 2, Code: "Code B"}]

然后我将迭代这个对象,按索引调用项目并使用 .length:

for (var i = 0; i < resuts.length; i++) {
            console.log('id:' + resuts[i].id +  ' | ' + 'Code:' + resuts[i].Code}

现在我想从服务器中提取这些数据,所以我创建了一个对象来处理属性并拥有这个操作方法:

public ActionResult GetResults()
{
string json = JsonConvert.SerializeObject(new
        {
            results = new List<Question>()
            {
                new Question { id = 1, Code = "Code A},
                new Question { id = 1, Code = "Code B}
            }
        });

        return Json(new { data = json }, JsonRequestBehavior.AllowGet);
}

我用这个 AJAX 调用它:

function GetResultsJSON() {    
        $.ajax({        
            type: 'GET',        
            url: '/Home/GetResults/',
            dataType: 'json',  
            traditional: true,     
            success: function (data) {            
                results = data;
            },        
            error: function (data) {
                alert('Error.');
            }
        })
 };

现在我的结果对象包含:

"{" results ":[{" id ":1," Code ":" Code A "},{" id ":1," Code ":" Code B "}]}"

现在我在尝试使用长度属性或按索引调用项目时遇到 JavaScript 错误。根据我阅读的内容,我认为我最初的硬编码对象只是一个数组,但是,我必须对从控制器返回的 JSON 进行不同的处理。

谁能建议返回我最初使用的数组格式或处理此处返回的 JSON 格式的最佳方法?我尝试过类似

$.each(data, function(i, obj) {
alert(obj.name);
});

但这返回未定义。任何帮助都会很棒。

【问题讨论】:

    标签: c# jquery asp.net-mvc json


    【解决方案1】:
    public JsonResult TestAjax(int leagueId)
        {
    
             var results = new List<BaseballViewModel>()
            {
                new BaseballViewModel{ DivisionId = 1},
                new BaseballViewModel{ DivisionId = 2}
            }.ToList();
    
             return Json(results, JsonRequestBehavior.AllowGet);            
        }
    
    $.ajax({
                url: "/Home/TestAjax",
                type: "GET",
                data: { leagueId: 5 },
                success: function (data) {
    
                 // alert(JSON.stringify(data)); show entire object in JSON format
                    $.each(data, function (i, obj) {
                        alert(obj.DivisionId);
                    });
                }
            });
    

    【讨论】:

    • 谢谢,我更改了我的控制器以返回一个 List,它返回 'Object { id=1, Code="Code A" }' 并允许我通过索引和 .长度等。创建一个 IEnumerable 似乎返回了每个 IEnumerable 的集合,这似乎改变了结果 JSON 的格式,我只需要一个。
    【解决方案2】:

    代替:

    $.each(data, function(i, obj) {
        alert(obj.name);
    });
    

    你为什么不试试:

    $.each(data.results, function(i, obj) {
        alert(obj.name);
    });
    

    【讨论】:

      【解决方案3】:

      如果您以这种方式创建模型类:

      [Serializable()]
      public class MyResponse
      {
         public int Id {get; set;}
         public string Code {get; set;}
      
      }
      

      你创建一个“MyResponse”列表

      你只需要这样做

      return Json(new { data = listOfMyResponse}, JsonRequestBehavior.AllowGet);
      

      【讨论】:

      • 可能列表无法序列化,您将不得不使用 MyResponse 表
      猜你喜欢
      • 1970-01-01
      • 2017-12-05
      • 2012-08-05
      • 2014-09-18
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多