通过AJAX从MVC返回JSON

本文关键字:返回 JSON MVC AJAX 通过 | 更新日期: 2023-09-27 18:10:11

我一直在使用硬编码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);
});

但是返回undefined。

通过AJAX从MVC返回JSON

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

而不是:

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

你为什么不试试呢:

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

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

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

创建一个"MyResponse"列表

你只需要做

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