【问题标题】:How to get MVC Controller json data in JavaScript using ajax如何使用 ajax 在 JavaScript 中获取 MVC 控制器 json 数据
【发布时间】:2015-04-30 18:22:12
【问题描述】:

我正在使用 .NET C# MVC/API 项目。在 Controller 我有以下代码:

    [HttpGet]
    public ActionResult ArcGISinit()
    {
        var jsonString = "[{ 'number': '555', 'api': '777', 'text': 'text'}]";
        return Json(jsonString, JsonRequestBehavior.AllowGet);
    }

然后在我的脚本文件中,我可以像这样得到上面的数据:

        // Path to the above **Controller**
        var serviceURL = "...";

        var respOriginal = [{ "number": 555, "api": "777", "text": text }]; 

        $.ajax({
            type:        "GET",
            url:         serviceURL,
            contentType: "application/json;",
            dataType:    "json",
            success:     successFunc,
            error:       errorFunc
        });

        function successFunc(data, status) {

            // Probably don't need this
            resp = JSON.stringify(data); 

            console.log("data:");
            console.log(data);
            console.log("respOriginal:");
            console.log(respOriginal);
        }

        function errorFunc() {
            alert('MVC controller call failed.');
        }

当我查看 Chrome 调试器时,这是一件事,在来自 MVC Controller 的 data 中,我得到了这个(纯字符串):

[{ 'number': '555', 'api': '777', 'text': 'text'}]

但是对于脚本文件中的 respOriginal,我得到了这个

[Object]

当对象展开时(respOriginal 中的数据)看起来格式正确,如下所示:

number : 555
api : 777
text : "text"

如何使来自 MVC 控制器 的 数据 看起来像 respOriginal 中的数据?

【问题讨论】:

    标签: c# ajax json model-view-controller visual-studio-2013


    【解决方案1】:

    我会建议为 API 函数创建 WebAPI 控制器,它开箱即用更灵活,而且做得恰到好处。此外,您将 API 从视图中分离出来,并且只需更改 HttpStatusCode 参数即可进行 401 或错误处理

    [HttpGet]
    public async Task<HttpResponseMessage> ArcGISinit()
    {
        var yourObjectArray = new object[] { new { number = 555, api = 777, text = "text" } };
        return Request.CreateResponse(HttpStatusCode.OK, yourObjectArray);
    }
    

    对于 JS,你是对的,你不需要 stringfy(即当你想将 JS 对象转换为 JSON 格式的字符串时),只需使用 data.number 之类的变量

    【讨论】:

    • 是的,从长远来看,这会让事情变得更容易。
    【解决方案2】:

    创建一个匿名对象或传入类似于你的结构的类的任何实例......你在对象周围有方括号,所以我猜它是一个数组:

    [HttpGet]
    public ActionResult ArcGISinit()
    {
        object[] yourObjectArray = new object[]{ new { number = 555, api = 777, text = "text"} };
        return Json(yourObjectArray , JsonRequestBehavior.AllowGet);
    }
    

    一个合适的类应该是这样的:

    public class YourClass
    {
        public int number {get;set;}
        public int api {get;set;}
        public string text {get;set;}
    }
    

    在控制器上:

    [HttpGet]
    public ActionResult ArcGISinit()
    {
        YourClass[] yourClassArray = new Yourclass[]{ new Yourclass { number = 555, api = 777, text = "text"} };
        return Json(yourClassArray , JsonRequestBehavior.AllowGet);
    }
    

    如果你使用 List

    会以同样的方式工作

    【讨论】:

      猜你喜欢
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多