如何使用ajax在JavaScript中获取MVC控制器json数据



我正在使用.NET C#MVC/API项目。在控制器中,我有以下代码:

    [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控制器我得到了这个(一个纯字符串):

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

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

[Object]

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

number : 555
api : 777
text : "text"

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

我建议为API函数创建WebAPI控制器,它更灵活,更简单。此外,您将API从视图中分离出来,只需更改HttpStatusCode parm 就可以进行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,你不需要字符串y(也就是说,当你想将JS对象转换为JSON格式的字符串时),只需使用data.number 这样的变量即可。

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

[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<YourClass>

最新更新