簡體   English   中英

如何使用Ajax在JavaScript中獲取MVC Controller json數據

[英]How to get MVC Controller json data in JavaScript using ajax

我正在使用.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 Controller的 數據中 ,我得到了這個(純字符串):

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

但是對於腳本文件中的respOriginal ,我得到了

[Object]

展開對象時( respOriginal中的數據)看起來格式正確,如下所示:

number : 555
api : 777
text : "text"

我如何可以使來自MVC控制器 的數據看起來像respOriginal數據?

我建議為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之類的變量即可。

制作一個匿名對象或傳遞類似於您的結構的類的任何實例...在對象周圍有方括號,因此我想它是一個數組:

[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>,將以相同的方式工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM